Javascript node.js res.write不';行不通
为了学习node js,我做了一些练习,但遇到了一个问题,“res”变量在index.js中起作用,但在fs.exists函数中不起作用,为什么?。谢谢你的回复 server.jsJavascript node.js res.write不';行不通,javascript,node.js,Javascript,Node.js,为了学习node js,我做了一些练习,但遇到了一个问题,“res”变量在index.js中起作用,但在fs.exists函数中不起作用,为什么?。谢谢你的回复 server.js var http = require("http"); global.PATH = __dirname; http.createServer(function(req, res) { var app = require("./index.js")(req, res); res.end();
var http = require("http");
global.PATH = __dirname;
http.createServer(function(req, res) {
var app = require("./index.js")(req, res);
res.end();
}).listen(8080);
index.js
var url = require("url");
var fs = require("fs");
module.exports = function(req, res){
if(req){
var pathname = url.parse(req.url).pathname.split("/");
pathname.splice(0,1);
var action = pathname[1];
fs.exists(PATH + "/" + pathname[0] + ".js" , function(exist){
var controller;
res.write('doesn\'t work');
if(exist)
{
if(!controller){
controller = require(PATH + "/controllers/" + pathname[0] + ".js" )();
if(controller[action])
controller[action]();
}
}
});
}
}
我不知道为什么你们中的一些人否决了这个问题,因为对于初学者来说,一些异步模式可能会令人困惑 首先,您应该缓存require调用(如Seth所述) 然后使用fs.exists创建index.js,这是异步的。这意味着在到达
fs.exists
中的回调函数之前调用res.end()
,这意味着请求/响应生命周期结束
您可以使用(不推荐!)或提供一些回调,完成后调用
还有两件事
如果(req)
不是必需的,则始终存在一个请求对象李>
http.createServer(function(req, res) {
app(req, res, function () {
res.end();
});
}).listen(8080);
var url = require("url");
var fs = require("fs");
module.exports = function(req, res, cb) { // see third cb-argument!
var pathname = url.parse(req.url).pathname.split("/");
pathname.splice(0,1);
var action = pathname[1];
fs.exists(PATH + "/" + pathname[0] + ".js" , function(exist){
var controller;
res.write('doesn\'t work');
if(exist)
{
if(!controller){
controller = require(PATH + "/controllers/" + pathname[0] + ".js" )();
if(controller[action])
controller[action]();
}
}
cb(); // whenever you're done call the callback
});
}
index.js:
http.createServer(function(req, res) {
app(req, res, function () {
res.end();
});
}).listen(8080);
var url = require("url");
var fs = require("fs");
module.exports = function(req, res, cb) { // see third cb-argument!
var pathname = url.parse(req.url).pathname.split("/");
pathname.splice(0,1);
var action = pathname[1];
fs.exists(PATH + "/" + pathname[0] + ".js" , function(exist){
var controller;
res.write('doesn\'t work');
if(exist)
{
if(!controller){
controller = require(PATH + "/controllers/" + pathname[0] + ".js" )();
if(controller[action])
controller[action]();
}
}
cb(); // whenever you're done call the callback
});
}
require()
是同步的,所以我不建议您在每个请求中都使用它。首先缓存它,然后调用您需要的文件。感谢您的响应我理解,这太愚蠢了,而且我知道fs.exists是异步的。