Проблема на сервере 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 и получить результат;-)

Другие вопросы по тегам