无法在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
完成执行时发生。