将函数的结果传递给Node JS中的server.js

时间:2019-03-10 17:42:05

标签: node.js

我是Node JS的新手,正努力使自己熟悉函数式编程。 我在名为findinfo.js的文件中包含以下代码,并且试图将结果传递到主server.js:

const fs = require('fs');
const values = ["yes", "no", "?", "unknown", "partial"];
var cInfo = [];

function getFile (cb) {
    fs.readFile('./scripts/blahblah.json', 'utf-8', function (err, jfile) {
        if (err) {
            throw new Error (err);
        }
        console.log("Function is executing...")
        JSON.parse(jfile);
        console.log('Parsing file done');
        cb(jfile);
    });
}

然后我正试图从server.js调用此函数,

var findinfo = require('./findinfo');
console.log(getFile());

如预期那样会使程序崩溃。

那我应该做些什么改变才能使它起作用?

1 个答案:

答案 0 :(得分:0)

您需要导出getFile,以便可以使用require进行导入。

const fs = require('fs');
const values = ["yes", "no", "?", "unknown", "partial"];
var cInfo = [];

function getFile (cb) {
    fs.readFile('./scripts/blahblah.json', 'utf-8', function (err, jfile) {
        if (err) {
            // throw new Error (err); // don't throw inside async callback
            return cb(err);
        }
        console.log("Function is executing...")
        JSON.parse(jfile);
        console.log('Parsing file done');
        cb(null, jfile);
    });
}

module.exports = getFile;

server.js

var getFile = require('./findinfo');

getFile(function(err, file) {
   console.log(err, file);
});

由于getFile是一个异步函数,因此您必须等到调用cb结束后才能console.log的结果。

不建议在异步回调中使用throw,因为它会使服务器崩溃,因此建议将错误传递给回调。

您应该看一下这个问题,以便进一步了解如何处理异步代码。

How do I return the response from an asynchronous call?