关于Jaydata Node Express CRUD服务器端ODATA的问题

时间:2014-08-13 02:28:27

标签: express odata sapui5 jaydata

我需要使用Node设置OData服务器。我设法让Jaydata启动并运行Express,定义了一个模型,可以正确加载。我可以在SAPUI5表中正确显示条目。

基本上this thread是我的方向以及this tutorial

以下是基本代码段落:

// ...
// 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 });
}));

如上所述,这些链接就像魅力一样,我可以从MongoDB数据库中获取条目: / api / $ metadata和/ api / User

我不幸的是当我尝试通过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 个答案:

答案 0 :(得分:0)

我找到并调试了同样奇怪的uri基础,并通过JayService.js中的更改来修复它

更改此行:

req.fullRoute =(req.baseRoute ||(schema +'://'+ req.headers.host))+ app.route;

到此内容:

req.fullRoute =(req.baseRoute ||(schema +'://'+ req.headers.host))+ req.baseUrl;

然后你可以实际请求生成的URI并获得结果; - )