readFile和readFileSync之间的区别

以下代码将index.html(它只包含文本hello world)的内容输出到浏览器。 但是,当我用readFileSyncreplacereadFile时,请求超时。 我错过了什么? 是否需要另外一种缓冲区? 我正在使用节点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的callback,就像你所说的那样 – 很好。 如果你简单地用fs.readFileSync来代替它,你需要知道它不需要callback,所以调用response.send的callback将永远不会被调用,因此响应将永远不会结束,并且会超时。

如果不是简单地用readFileSyncreplacereadFile,则需要显示readFileSync代码。

另外,只要你知道,你不应该在节点express / webserver中调用readFileSync,因为它将在I / O执行时绑定单线程循环。 您希望节点循环处理其他请求,直到I / O完成并且您的callback处理代码可以运行。

 'use strict' var fs = require("fs"); /*** * implementation of readFileSync */ var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("Program Ended"); /*** * implementation of readFile */ fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("Program Ended"); 

为了更好的理解,运行上面的代码并比较结果。