【发布时间】:2015-09-17 22:30:19
【问题描述】:
我正在尝试在 nodejs 中编写一个 RESTfull API,它基本上围绕一个控制器/模型架构,我遇到了一些关于 nodejs 的异步性质的问题:
Station.js:(控制器)
'use strict';
var url = require('url');
var Stations = require('./StationsService');
module.exports.stationsGet = function stationsGet(req, res, next){
var result = Stations.stationsGet(req.swagger.params['arg']);
if(typeof result !== 'undefined') {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(result || {}, null, 2));
}
else
res.end();
};
StationService.js:(模型)
'use strict';
exports.stationsGet = function(param){
var data_output = {};
var sql = 'SELECT * FROM foo WHERE args = ${foo}';
db.execute(sql, {foo: param}, db.queryResult.any, function(result){
// 'result' containing the query data
});
// Ideally: data_output = result;
return data_output;
}
问题是如果我在我的 db.execute 上使用回调继续,我必须给所有控制器上下文(res,...)来回复客户端,并且它破坏了模型/控制器模式,因为我modele 让剩下的控制器工作。
有没有一种(简单的?)方法可以在stationGet() 中获取查询结果然后返回它? 这真的违背了 nodejs 的本质吗?如果是,在这种情况下如何采取正确的行为?
PS:我使用的是 swagger,它为 nodejs 生成了文件和基本结构。
【问题讨论】:
标签: sql database node.js asynchronous controller