【问题标题】:node.js responds twicenode.js 响应两次
【发布时间】:2012-10-16 08:52:06
【问题描述】:

我在 debian 机器上全新安装节点(来自 git)时出现了一个奇怪的行为。 似乎问题不在我的代码中,因为在 Windows 上一切正常。 我已经知道这不是网站图标问题。

这是我写的:

var app = require('express')()
  , server = require('http').createServer(app)
  , io = require('socket.io').listen(server) 
  , url = require('url')
  , qs = require('querystring')
  , request =  require('request')
  , fs = require('fs')

紧随其后

server.listen(3000); 
app.post('/postReload', function (req, res) {
  var fullBody = '';
  req.on('data', function(chunk) {
    fullBody += chunk.toString();
    if (fullBody.length > 1e6) {
        req.connection.destroy();  
    }
  });
  req.on('end', function() {        
    out = qs.parse(fullBody);
    vars = out.vars || ''; 
    if(out.module && out.value){ 
        // do the job
        // console.log here is done twice !
    }
    res.writeHead(200, {'Content-Type': 'text/html'}) 
    res.end(); 
 });
}); 

另一种写法时:

app.post('/postReload', function (req, res) {
  // console.log here is done twice !
}

这个问题影响到每一个浏览器,一周的测试并没有解决任何问题。

这里有人有想法吗?

双重动作发生在 curl 或浏览器访问时。

【问题讨论】:

  • 是连续记录两次还是在两分钟内记录两次?
  • 同一帖子立即两次。如果在后服务器端生成一个随机数,则相同的数字重复两次
  • 这是一个长镜头......但我怀疑您的代码中的某些内容可能会触发额外的请求“结束”事件。您可能希望将代码精简到最低限度(例如,没有正文解析、没有长度验证等),然后离开 console.log() 看看是否是这种情况。

标签: node.js debian


【解决方案1】:

谢谢赫克托·科雷亚。

这就是我声明 socket.io 的方式... 我新的简单代码是:

var express = require('express')
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

app.get('/', function (req, res) {
console.log('Only one time !!!')
res.end();
})

我现在继续点头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2021-06-13
    • 1970-01-01
    • 2020-04-02
    • 2016-04-03
    相关资源
    最近更新 更多