外部模块中的Nodejs异步函数不会返回值

时间:2019-06-06 13:25:50

标签: javascript node.js express

我正在尝试使用在单独的模块中创建的函数,该函数读取JSON文件(使用“ fs”)并在控制台和浏览器中显示其内容。我发现该代码在Express app.use块内时可以运行,但是如果它来自外部文件则无法运行,更糟糕的是,我没有收到任何错误。当我打印出我认为是控制台中函数内容的内容时,我收到的只是一个“未定义”。

在我的外部模块文件中:

var fs = require("fs");

exports.getData = function () {
    var something;
    fs.readFileSync("./TestFile.json", function (err, data) {
             if (err) throw err
             console.log(data.toString());
        something = data.toString();
        
    });
    return something;
};

在我的主文件中,我有以下内容:

var fs = require("fs");
var mt = require("./ModelTest.js");
var express = require("express");
var app = express();

app.get('/', function (req, res) {
    rs.send("Main Page")
})

app.use('/Works', function (req, res) {
    //The contents of the file will display properly in the browser
    fs.readFile("./TestFile.json", function (err, data) {
        if (err) throw err;
        res.send(data.toString());
    });
});

app.use('/Fails', function (req, res) {
    //Browser is blank, with no error in the console
    res.send(mt.getData);
});

var server = app.listen(3000, function () {
    console.log("Listening on port 3000");
    
})

如果在这里缺少概念性的内容,我深表歉意,因为我不熟悉NodeJS的异步功能。我了解异步函数需要根据需要进行回调和Promise,但我似乎无法弄清楚为什么相同的函数无法在单独的文件中工作。

0 个答案:

没有答案