node.js res.write不起作用

为了学习node js,我做了一些练习,但遇到了一个问题,index.js中的“res”variables工作,但在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(); }).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](); } } }); } } 

我不知道为什么你们中的一些人低估了这个问题,因为对于初学者来说,一些asynchronous模式可能会让人困惑。

首先,你应该caching你的需求调用(如Seth提到的)。

 global.PATH = __dirname; var http = require("http"); var app = require("./index"); //omit .js, you don't need it 

那么你你index.js你正在使用fs.exists,这是asynchronous的。 这意味着res.end()fs.exists的callback函数被调用之前被调用,这意味着请求/响应生命周期结束。

你可以使用fs.existsSync (不推荐!)或者提供一些你完成后调用的callback函数 !

2件事

  1. if(req)是不必要的,总是有一个请求对象!
  2. 你总是需要在你的函数中调用callback,以便发送响应!

server.js:

 http.createServer(function(req, res) { app(req, res, function () { res.end(); }); }).listen(8080); 

index.js:

 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 }); }