NodeJS MSSQL驱动程序将数据传递给调用函数

时间:2017-07-14 13:16:27

标签: sql-server node.js express

在NodeJS中使用SQL Server,我已经确认它正在提取数据,但我正在尝试将数据传递回调用函数。

这是我对查询数据库的函数的调用:

const dbq = require('./dbquery.js');
app.get('/:id', (req, res) => {
  reqlog(`/${req.params.id}`);
  var set = dbq.getPersonById(req.params.id);
  console.log(set);
});

这是dbquery.js中的函数:

qry.getPersonById = (id) => {

  mssql.connect(sqlConfig).then(() => {
    new mssql.Request().query(`select * from FNVPeople where IndivID=${id}`).then((record)=>{
      console.log(record);
      return record;
    }).catch((err)=>{
      console.log(err);
    });
  });
}

我对函数的调用应该是这样吗?

var dataset = await(dbq.getPersonById(req.params.id));

2 个答案:

答案 0 :(得分:1)

由于异步性质。

尝试以下方法:

const dbq = require('./dbquery.js');
app.get('/:id', (req, res) => {
  reqlog(`/${req.params.id}`);
  dbq.getPersonById(req.params.id, function(err, res){
      console.log(res);
  });      
});


qry.getPersonById = (id, callback) => { 

    mssql.connect(sqlConfig).then(() => {
        new mssql.Request().query(`select * from FNVPeople where IndivID=${id}`).then((record)=>{
          console.log(record);
          callback(null, record);
        }).catch((err)=>{
          console.log(err);
        });
      });
    }

答案 1 :(得分:0)

您应该将承诺退还给客户处理(请注意另外两个returns):

qry.getPersonById = (id) => {

  return mssql.connect(sqlConfig).then(() => {
    return new mssql.Request().query(`...`)
       .then((record)=>{
          console.log(record);
          return record;
       })
       .catch((err)=>{
          console.log(err);
       });
  });

}

然后,客户处理承诺

app.get('/:id', (req, res) => {
  reqlog(`/${req.params.id}`);
  dbq.getPersonById(req.params.id).then( set =>
     console.log(set); 
  );
});

通过重写async/await的承诺,您甚至可以

qry.getPersonById = async (id) => {

  try {
     await mssql.connect(sqlConfig)
     var record = await new mssql.Request().query(`...`);
     console.log(record);
     return record;
  }
  catch (err) {
     console.log(err);
  }
}

app.get('/:id', async (req, res) => {
  reqlog(`/${req.params.id}`);
  var set = await dbq.getPersonById(req.params.id);
  console.log(set); 
});