使用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语句就是答案。
答案 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
]
});