无法在express节点js中从模块返回数据

我在一个文件中写了下面的代码:

车型/ exported.js

module.exports = { processedList: function(store_name) { var t; var tradeIds = exported.find({storename: store_name}, function (err, value) { if (err) return console.error(err); return value; }).select('tid -_id'); }, // Export connection here }; 

我有另一个path文件

路线/ exported.js

 var exported = require('../models/exported.js'); var tradeIds = exported.processedList(storename); console.log('simer'+tradeIds); } 

但是我在console.log中得到了undefined。 如果不是在processedlist中的return语句,我写console.log然后结果得到控制台。 但我的要求是将数据从模型文件返回到路由文件。

我是新来expression和节点js。

我的指导将不胜感激。

根据你的问题,你想要从路由调用一个函数,并获得你的函数返回路由的响应。 简单的使用callback函数。

models/exported.js

  module.exports = { processedList: function (store_name, callback) { var t; var tradeIds = exported.find({storename: store_name}, function (err, value) { if (err) { callback("error", err) } else { callback("success", value) } }).select('tid -_id'); } } 

路线/ exported.js

  var exported = require('../models/exported.js'); exported.processedList('storename', function (err, results) { if (err == 'error') { console.log(err); } else { console.log(results); } }); 

您正尝试在asynchronous环境中进行同步操作。 processedList可能会或可能不会完成,当您尝试控制台日志tradeIds 。 NodeJS不会等待它完成,因为它本质上是asynchronous的(按devise,这不是一个错误)。 您可以传递callback,而不是以这种方式执行。

车型/ exported.js

 module.exports = { processedList: function(store_name, cb) { var t; var tradeIds = exported.find({storename: store_name}, function (err, value) { if (err) return cb(err); cb(null, value); }).select('tid -_id'); }, // Export connection here }; 

路线/ exported.js

 var exported = require('../models/exported.js'); exported.processedList(storename, function(err, results) { if (err) { console.log(err); } console.log(results); }); 

这可以确保console.log仅在processedList完成执行时发生。