如何解决Node.js:在异步结果上返回结果
在这种情况下,您应该使用回调(也请看一下promise)
您的控制器将如下所示:
'use strict';
var url = require('url');
var Stations = require('./StationsService');
module.exports.stationsGet = function stationsGet(req, res, next){
Stations.stationsGet(req.swagger.params['arg'], function(err, result) {
if(typeof result !== 'undefined') {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(result || {}, null, 2));
}
else
res.end();
});
};
并且您创建的模型必须接受回调作为最后一个参数,然后返回err
,result
如下所示:
'use strict';
exports.stationsGet = function(param, cb){
var data_output = {};
var sql = 'SELECT * FROM foo WHERE args = ${foo}';
db.execute(sql, {foo: param}, db.queryResult.any, function(result){
cb(null, result); // first parameter is the error and the second is the result, this is pretty standard in node
});
}
我希望这可以帮助你
解决方法
我正在尝试在nodejs中编写一个RESTfull API的代码,该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,…)以回复给客户端,并且由于我的模型执行了以下操作,这会破坏模型/控制器模式。剩余的控制器工作。
是否有一种(简单的方法)在stationsGet()中获取查询结果,然后将其返回?是否真的违反了nodejs的本质?如果是,那么在这种情况下如何采取正确的行为?
PS:我正在使用swagger,它已经为nodejs生成了文件和基本结构。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。