请求未在node.js中结束(用于工作)
我有一段代码:请求未在node.js中结束(用于工作),node.js,Node.js,我有一段代码: var app = require('http').createServer(function(req, res){ console.log(req); req.addListener('end', function () { fileServer.serve(req, res); }); }); var statics = require('node-static'); var fileServer = new statics.Ser
var app = require('http').createServer(function(req, res){
console.log(req);
req.addListener('end', function () {
fileServer.serve(req, res);
});
});
var statics = require('node-static');
var fileServer = new statics.Server('./');
app.listen(1344, '127.0.0.1');
app.on('error', function(err){
console.log(err);
})
它工作得很好,直到我做了一些更改,node给出了一个错误,当我返回时,该错误不再存在,而是像在未触发end
事件之前一样工作。因此,req.addListener('end',function(){})中的任何内容代码>未被调用
即使我运行另一个使用相同事件的node.js,也不会被触发。这就像请求的结束事件被破坏一样。但这怎么可能呢
这已经不是第一次了。上次我重新安装了node(在尝试了很多不同的事情之后)。我更愿意找到一个解决方案,这样我才能理解问题
注意:原始代码包括socket.io和其他类型的连接,但我刚刚粘贴了应用程序被卡住的代码
了解如何调试问题也很有用 @InspiredJW指出这一点应该得到赞扬,因为我已经忘记了,但毫无疑问,你的问题是因为可读流的变化。为了调用end
事件,您必须将侦听器连接到数据
事件,或者必须调用流.resume()
尝试使用节点v0.8.x
或阅读中的Stream2文档,我不能说文件服务器.service
是否工作,但是如果您取出与节点静态相关的所有内容,您的代码将按原样工作,并且肯定会调用结束
事件。我记得当我们尝试使用节点static
时遇到了问题,如果这确实是您的问题,您最好使用Connect的静态中间件@我在v0.10.3上。你是说我应该降级吗?没有节点静态也不行。无论如何,我都要尝试一下连接。但是我认为我应该首先重新安装node。@limoragni或者您可以使用resume
来创建新的流。他现在正在工作。我不明白的是,我是怎么开始工作的!我是node.js的新手,我必须读很多书才能让事情顺利进行。你知道一本关于node的好书吗?我知道Apress正在开发一个,但我更希望马上就有一个。谢谢对不起,我不知道。我只是通过使用它来学习node。它以前可能工作过,因为您连接了'data'
事件侦听器,或者您使用的是旧版本的节点。@limoragni您可能将节点升级到v0.10.3或更高版本,这就是导致它停止工作的原因。
require('http').createServer(function(req, res){
req.addListener('end', function () {
// won't ever get called in node v0.10.3
});
});
require('http').createServer(function(req, res){
req.addListener('end', function () {
// will get called in node v0.10.3 because we called req.resume()
});
req.resume();
});
require('http').createServer(function(req, res){
req.on('data', function (chunk) { });
req.addListener('end', function () {
// also will get called because we attached a data event listener
});
});