如何在node.js端为Ember.js设置HasMany关系

时间:2015-06-22 15:46:03

标签: node.js ember.js ember-data

使用express.js服务器将我的应用程序设置为Ember作为前端框架和node.js后端。没有服务器端框架在起作用,所以如果我要从/ users请求GET,我手动编写一个sql语句来获取所需的用户。

现在,问题是,我在inspectionResultType(父级)和inspectionResults(子级)之间设置了hasMany / BelongsTo关系。

App.InspectionResultType = DS.Model.extend({
    inspectionResultTypeID: DS.attr('number'),
    name: DS.attr('string'),
    ...
    inspectionResults: DS.hasMany('inspectionResult', {async: true}), // figure out how to make this work. 
    // inspectionResults: DS.hasMany('inspectionResult'),
});

App.InspectionResult = DS.Model.extend({
    inspectionResultID: DS.attr('string'),
    ...
    inspectionResultType: DS.belongsTo('inspectionResultType')
});

现在,InspectionResultTypes在Ember应用程序中没有自己的路线;它们只能从记录页面访问。因此,在记录路径中,我使用Ember RSVP将inspectionResultTypes作为属性调用,它确实可以获取inspectResultTypes,但是没有显示inspectResults。

在我的服务器日志中,我注意到了这一点:

GET /inspectionResults?ids%5B%5D=2741&ids%5B%5D=2742&ids%5B%5D=2743&ids%5B%5D=2744 200 49597ms

(请忽略200结果值。那是错误的。)

所以我的问题是:如何在node.js端处理这样的GET请求?似乎有多个id,我不认为运行几个sql语句就是答案。

1 个答案:

答案 0 :(得分:0)

您必须在node.js中的控制器方法中访问req.query.ids。你会得到一个数组 - 比如:

var ids = req.query.ids; // [2741, 2742, 2744]

然后您必须使用IN Clause查询您的数据库。因此,您的查询如下所示:

var query = 'SELECT * FROM InspectionResults WHERE id IN ( ' + ids.join() + ' );';

然后你从你的数据库中得到一系列模型,你必须发送它以回应Ember,你应该对它很熟悉:

res.json({
InspectionResults: [
{}, // 2741
{}, // 2742
{} // 2744
]
});