尽管显式返回语句,但Node.JS返回undefined

时间:2016-06-15 10:24:28

标签: node.js

我有这段简单的代码:

var http = require('http'), fs = require("fs");
function get(p) {
    fs.readFile('.' + p,'utf8', function (err, cont) {
        if  (err) return "EERRRORRRRR";
        else return cont;
    })
}
http.createServer(function (request, response) {
    var path = ((request.url==="/")?"/index.html":request.url);
    console.log(get(path));
}).listen(80);

当我运行并连接到服务器时,它会记录未定义...

当我添加“console.log(cont)”时,如:

    fs.readFile('.' + p,'utf8', function (err, cont) {
        console.log(html)
        if  (err) return "EERRRORRRRR";
        else return cont;
    })

它记录了正确的内容,为什么函数返回undefined?内容存在......

我该如何解决这个问题?

如果您无法分辨,代码的原始上下文是一个简单的Web服务器。

3 个答案:

答案 0 :(得分:1)

了解回调和异步功能,您可以在谷歌中找到文档

var http = require('http'), 
    fs = require("fs");

// notice new parameter callback
function get(p, callback) {
    fs.readFile('.' + p,'utf8', callback);
}

http.createServer(function (request, response) {
    var path = ((request.url==="/")?"/index.html":request.url);

    // get accepts callback
    get(path, function(err, data){
        if(err){
            response.send('not found');
        } else {
            response.send(data);
        }
    });
}).listen(80); // notice: port 80 requires sudo to run, use better 3000

答案 1 :(得分:0)

node.js中的

readFile是异步的(以及几乎所有其他函数)。您无法从异步函数返回值,而是需要使用将在操作结束后调用的回调函数:

 fs.readFile('.' + p,'utf8', function (err, cont) {
            console.log(html)
            if  (err) return "EERRRORRRRR";
            else handleResponse(cont);
        })

function handleResponse(data){//Do something here}

答案 2 :(得分:0)

如果您想在不使用回叫的情况下返回某些内容,请使用readFileSync

function get(p) {
    var file = fs.readFileSync('.' + p,'utf8');
    return file ? file : "EERRRORRRRR";
}

这假设您不介意使用同步/阻止代码。

相关问题