2017-04-03 38 views
0

我从来没有这样做过。我创建了myModule.GetRecord(),我可以看到recordset已成功获得预期记录。 然而,retrouter.get()中是undefinednode.js创建具有返回值的函数的自定义模块

我相信,因为我需要赶上回调返回值。

我不知道如何定义该模块/函数回调(如果那是什么,我适当地寻找做)或如何调用该函数回调。

我已经尝试了一些不同的东西,即典型的GetRecord(ret, function() { ... });但没看到任何出现的工作。我读就行了一堆,但没有发现我相信我所要找的。

我真的不关心太多关于我如何到达那里,但所有我真正想要做的是有mm.GetRecord()的一些可用的形式在router.get()

返回的值 - - myModulefile.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; 
       } 
      }); 
     }); 
    } 
}; 

--- myRouter.js ----

const express = require('express'); 
const router = express.Router(); 
const mm = require('../myModule'); 


router.get('/:id', function (req, res) { 
    var id = req.params.id; 
    var ret = mm.GetRecord(id) 
    console.log('ret', ret); 
    if (ret == null) 
     ret = JSON.stringify({ ID: -1, f1: 'unknown' }); 
    res.send(ret); 
}); 

module.exports = router; 

回答

0

当然,在将问题放在这里之后,我找到了答案。

GetRecord()具有到与该临危传递给它的回调参数来定义。并且回调paramater的变量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); 
}); 
使用