具有WebAPI OData V4的JayData返回未定义的

时间:2016-05-19 14:55:56

标签: node.js odata asp.net-web-api2 aws-lambda

我正在NodeJS中编写AWS lambda函数来从WebAPI OData V4服务中读取数据(http://localhost/SomeService/ $ metadata) 我使用JaySvcUtil生成了元数据文件,并在Lambda函数中引用了生成的文件

'use strict';
let $data = require('jaydata');
let meta = require('./apiData');

exports.handler = function (event, context) {

var con = new DataContext({
    name: 'oData',
    oDataServiceHost: 'http://localhost/SomeService'
});

con.onReady(function () {
    $data.Users.forEach(function(data) {
        console.log(data.Id);
    });;
};

不幸的是,当调用onReady方法时,未定义Users对象以及我的API所发布的任何其他类型。

知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

原来,jaysvcutil创建的生成代码不能与nodejs一起使用。 不应使用.extend,而应使用.define,如文档中所述。

$data.Class.define('Project.User', $data.Entity, null, {
    'UserID': { 'key': true, 'type': 'Edm.Int32', 'nullable': false, 'computed': true },
});

$data.Class.define('$Project.Types.Context', $data.EntityContext, null, {
    Users: { type: $data.EntitySet, elementType: Project.User }
});

上下文初始化回调应定义如下:

jayContext = new $Project.Types.Context({
    name: 'oData',
    oDataServiceHost: 'http://localhost/SomeService'
}); 

jayContext.onReady(function (serviceContext) {
    serviceContext.Users.forEach(function (user) {
        console.log(user.UserID);
    });

    context.done(null, 'Hello World');
});