Использование экспорта в nodejs для возврата значения из функции в функцию - PullRequest
0 голосов
/ 14 февраля 2019

Я немного читал о модульности моего кода и решил экспортировать некоторые функции в отдельный файл и включить их в мою основную функцию после ее вызова.Только мой конфиг моего сайта не возвращается, если я звоню по нему:

// Export from my controller
// File: Controller.js
exports.site_config = function(company, data) {

   siteConfig.find({"company" : company}, function data (err, siteConfig, data) {
    // Console.log(siteConfig[0]) // Works
    return siteConfig[0] // This return is not working
    })
  // Only here returns works....
}

// File: Index.js
const siteController = require('../controllers/site');
console.log(siteController.site_config('company2')) // nothing return



Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

В nodejs-express js вам нужно передать функцию в качестве обратного вызова.

, когда результат доступен или в коде произошла ошибка, вернуть их в обратном вызове;

// File: Controller.js

напишите свою функцию внутри module.exports:

module.exports = {
   var site_config = function(company,callback) {
      siteConfig.find({"company" : company}, function(err, data) 
      {
         if(!err && data){
          // no error and data is available , so pass err as null and data as data[0] to callback
         return callback(null,data[0]);
         }else{
          // error occured , pass err as err and data = null to callback
          return callback(err,null);
         }
      });
   }
}

в вашем файле: Index.js, требуется файл Controller.js

const siteController = require('../controllers/Controller');
siteController.site_config('company2',function(err,data){
    console.log(data);
});
0 голосов
/ 14 февраля 2019

Это особый случай этой проблемы .Синхронный код может быть преобразован в асинхронный, но не наоборот.

Mongoose поддерживает обещания в течение длительного времени, API обратного вызова является устаревшим.Это пример их использования.

Модуль должен экспортировать обещание объекта конфигурации.Более краткий способ получения одного документа: findOne:

exports.site_config = function(company, data) {
   return siteConfig.findOne({"company" : company});
};

И используется как обещание.Должна быть цепочка обещаний, вплоть до точки входа в приложение, если это необходимо:

// inside `async` function:
const siteController = require('../controllers/site');
const config = await siteController.site_config('company2');
0 голосов
/ 14 февраля 2019

ваша функция поиска возвращает обратный вызов, вы можете сделать что-то вроде этого:

// Export from my controller
// File: Controller.js
exports.site_config = function(company, data, callback) {

   siteConfig.find({"company" : company}, function (err, siteConfig, data) {
    callback(siteConfig[0]);
    })
}

// File: Index.js
const siteController = require('../controllers/site');
console.log(siteController.site_config('company2', null,function (result) {
  console.log(result)
})) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...