无法从快速节点js中的模块返回数据

时间:2017-02-07 06:42:06

标签: node.js express

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

模型/ 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
    };

我在路线中有另一个档案

路由/ exported.js

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

但我在console.log中未定义。如果不是在处理列表中的return语句,而是编写console.log,那么结果将获得控制台。但我的要求是将数据从模型文件返回到路由文件。

我是表达js的新手。

我的指导将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

您正在异步环境中尝试同步操作。当您尝试控制日志processedList时,tradeIds可能已完成,也可能未完成。 NodeJS不会等待它完成,因为它本质上是异步的(根据设计,它不是一个bug)。您可以传递回调而不是以这种方式执行。

<强>模型/ 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完成执行时发生。

答案 1 :(得分:1)

根据您的问题,您希望从路由调用函数并从您的函数获取返回响应以进行路由。简单使用回调函数。

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