node.js创建具有返回值的函数的自定义模块

时间:2017-04-03 20:37:29

标签: node.js express module

我以前从未这样做过。我创建了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;
                }
            });
        });
    }
};

1 个答案:

答案 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);
});