以下代码将index.html的内容(它仅包含文本hello world)输出到浏览器。但是,当我用readFile()替换readFileSync()时,请求超时。
我想念什么?是否需要其他类型的缓冲区?我正在使用节点0.61并表示2.4。

var express = require('express');
var fs = require('fs');

var app = express.createServer(express.logger());

app.get('/', function(request, response) {
    fs.readFile('index.html', function(err, data){
        response.send(data.toString());
    });
});

var port = process.env.PORT || 5000;
app.listen(port, function() {
  console.log("Listening on " + port);
});

最佳答案

fs.readFile进行了回叫,如您所示,调用了response.send-很好。如果仅将其替换为fs.readFileSync,则需要注意它不会进行回调,因此调用response.send的回调将永远不会被调用,因此响应将永远不会结束并且会超时。

如果您不只是将readFile替换为readFileSync,则需要显示readFileSync代码。

另外,您已经知道,您应该绝不调用节点express/webserver中的readFileSync,因为它会在执行I/O时阻塞单线程循环。您希望节点循环处理其他请求,直到I/O完成并且您的回调处理代码可以运行为止。

关于javascript - readFile()和readFileSync()之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17604866/

10-12 13:41