首页 > 解决方案 > 我应该从哪里调用 module.exports 来获取非空值?

问题描述

我应该在哪里调用module.export,我认为它应该是一个回调函数。

但是我很困惑我应该在哪里调用回调函数。

我仍然对解决方案感到困惑,对我来说太复杂了。

sql.connect(config, function(err) {

  if (err)
    console.log(err);

  // create Request object
  var request = new sql.Request();

  // query to the database and get the records
  request.query('select part_num,qty from CRM.CRM.Fishbowl_Inventory where not location = \'Shipping\'',

    function(err, recordset) {

      if (err)
        console.log(err)

      // send records as a response
      var details = recordset;
    });
});

module.exports = details;

混乱:

非常抱歉打扰你们,但我想确保通过 Javascript 参与任何数据库请求不会对我们的数据库造成伤害。

我正在直接使用我们的生产数据库进行测试,因此谨慎

因此,Max 在他的回答中提供了以下代码

const connectToSql = require('./connectToSql');

connectToSql()
    .then(details => {
        console.log(details);

    //Here I can do as much logic as I want 
    //And it won't affect my database or call multiple requests on my DB 


    })
    .catch(err => {
        console.log(err);
    });

我能理解我在问超级愚蠢的问题,对此非常抱歉。

标签: javascriptasynchronouses6-promise

解决方案


您无法导出函数的结果。您想要导出一个将返回您的值的函数。像这样:

function connectToSql(config) {
  return new Promise((resolve, reject) => {
    sql.connect(config, function (err) {

      if (err) {
        console.log(err);
        reject(err);
      }

      // create Request object
      var request = new sql.Request();

      // query to the database and get the records
      request.query('select part_num,qty from CRM.CRM.Fishbowl_Inventory where not location = \'Shipping\'',

        function (requestErr, recordset) {

          if (err) {
            console.log(requestErr);
            reject(requestErr);
          }

          resolve(recordset);
        });
    });
  });
}

module.exports = connectToSql;

因为你的函数是异步的,所以我返回了一个承诺,它将返回你的结果。此外,查询中的第二个错误的名称与连接中的第一个错误相同。那会引起问题。

如何使用它的示例:

const connectToSql = require('./connectToSql');

connectToSql()
    .then(details => {
        console.log(details);
    })
    .catch(err => {
        console.log(err);
    });

推荐阅读