Search code examples
javascriptasynchronouses6-promise

From where should I call module.exports to get a not null value?


Where should I call module.export, I assume, it's supposed to be a callback function.

But I'm confused as to where am I supposed to call the callback function.

I'm still confused with the solution, too complicated for me.

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;

Confusion:

Extremely sorry to bother you guys but I want to be sure that I'm doing no harm to our database by involving any database request through Javascript.

I'm testing directly with our production database, hence cautious

So as Max provided in his answer the following code

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

I can understand I'm asking super silly questions, very sorry about that.


Solution

  • You can't export the result of your function. You want to export a function that will return your value. Like this:

    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;
    

    Because your function is async, I returned a promise that will return your result. Also, your second error from your query is named the same as your first error from the connection. That would cause problems.

    Example of how to use this:

    const connectToSql = require('./connectToSql');
    
    connectToSql()
        .then(details => {
            console.log(details);
        })
        .catch(err => {
            console.log(err);
        });