我以前从未这样做过。我创建了myModule.GetRecord()
,我可以看到recordset
成功拥有预期记录。
但是,ret
中的router.get()
为undefined
。
我相信因为我需要在回调中捕获返回的值。
我不知道如何为回调定义此模块/函数(如果这是我正在寻找的那样)或如何为回调调用此函数。
我尝试了一些不同的东西,即典型的GetRecord(ret, function () { ... });
但是没有看到任何似乎有效的东西。我在线上看了一堆但没找到我相信我正在寻找的东西。
我真的不太关心我是如何到达那里的,但是我真正想做的就是mm.GetRecord()
在{{1}中以某种可用的形式返回值}
--- myModulefile.js ---
router.get()
--- myRouter.js ----
'use strict';
module.exports = {
GetRecord: function (id) {
var sql = require('mssql');
sql.connect({ user: 'sa', ... database: 'name' }, function (err) {
if (err) { console.log(err); return null; }
var cmd = new sql.Request();
cmd.query('select * from Records where id = ' + id, function (err, rs) {
if (err) { console.log(err); return null; }
if (rs.recordset.length > 0) {
console.log('rs[0]', rs.recordset[0]);
return rs.recordset[0];
} else {
return null;
}
});
});
}
};
答案 0 :(得分:0)
当然,我把问题放在这里后找到答案。
必须使用一个参数来定义GetRecord(),该参数接收传递给它的回调。回调参数变量fn
用于代替return
GetRecord: function (id, fn) {
var sql = require('mssql');
sql.connect({ user: 'sa', ... database: 'name' }, function (err) {
if (err) { console.log(err); fn(null); }
var cmd = new sql.Request();
cmd.query('select * from Records where id = ' + id, function (err, rs) {
if (err) { console.log(err); fn(null); }
if (rs.recordset.length > 0) {
console.log('rs[0]', rs.recordset[0]);
fn(rs.recordset[0]);
} else {
fn(null);
}
});
});
}
和
GetRecord(id, function(ret) {
console.log('ret', ret);
});