Проблема на сервере Jaydata Node Express CRUD на стороне сервера ODATA
Мне нужно настроить сервер OData с Node. Мне удалось настроить Jaydata и запустить его с помощью Express, определил модель, которая загружается правильно. Я могу правильно отобразить записи в таблице SAPUI5.
По сути, эта тема была моей ориентацией вместе с этим уроком.
Ниже приведены основные фрагменты кода:
// ...
// Model.js
//
$data.Class.define("Cases.User", $data.Entity, null, {
Id: { type: "id", key: true, computed: true, nullable: false },
FirstName: { type: "string", required:true},
LastName: {type:"string", required:true},
Username: {type:"string", required:true},
Email: {type:"string", required:true},
isAdmin: {type:"boolean"},
Password:{type:"string", minLength: 8}
}, null);
$data.EntityContext.extend("CaseDatabase", {
Users: { type: $data.EntitySet, elementType: Cases.User }
});
$data.Class.defineEx("Cases.Context", [$data.EntityContext,$data.ServiceBase], null, {
User:{ type: $data.EntitySet, elementType: Cases.User }
});
exports = Cases.Context;
Извлечь из router.js
:
app.use("/api", $data.JayService.OData.Utils.simpleBodyReader());
app.use("/api", $data.JayService.createAdapter(Cases.Context, function (req, res) {
return new Cases.Context({name: "mongoDB", databaseName:"cases", address: "127.0.0.1", port: 27017 });
}));
Как уже говорилось, эти ссылки работают так же, как charm, и я могу получить записи из метаданных db: /api/$ и /api/User MongoDB
Мне не повезло, когда я пытаюсь добавить любую запись через клиент SAPUI5. Я следовал той же схеме, что и в вышеупомянутом вопросе:
Модель должным образом привязана к таблице SAPUI5, так как указанное отображение работает.
var oModel = new sap.ui.model.odata.ODataModel("/api");
oModel.setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay);
var oTable = sap.ui.getCore().byId("UserList")
oTable.setModel(oModel);
oTable.bindRows("/User");
Что не работает, это когда я хочу добавить запись пользователя. Я заполняю данные в переменную, но отправляю данные обратно в сервис (/api
) результаты всегда в:
Статус 405 - Метод не разрешен.
Публикация в URI: /api/User
результаты в статусе 500.
Код на стороне клиента:
...
OData.request({
requestUri: "/api/",
method: "POST",
data: user
},
function(insertedItem) {
console.log(insertItem);
},
function(err) {
console.log(err);
});
...
Еще я заметил, что xml:base
выглядит очень странно (localhost:3000/api
):
<service xml:base="http://localhost:3000undefined/">
содержащий "неопределенный". Однако я понятия не имею, является ли это корнем моей проблемы и, во-вторых, как избавиться от неопределенной ошибки.
1 ответ
Я нашел и отладил ту же странную базу URI, и это исправлено изменением в JayService.js
Измените эту строку:
req.fullRoute = (req.baseRoute || (схема + '://' + req.headers.host)) + app.route;
К этому содержанию:
req.fullRoute = (req.baseRoute || (схема + '://' + req.headers.host)) + req.baseUrl;
И тогда вы действительно можете запросить сгенерированный URI и получить результат;-)