【问题标题】:duplicate request from the client express nodejs来自客户端 express nodejs 的重复请求
【发布时间】:2013-05-07 15:39:49
【问题描述】:

我的应用中有一个我无法解决的问题

首先是我的应用程序:

nodejs 0.8.14 表达 3.1 本地护照 0.1

问题是当我登录护照会话时,客户端请求页面两次...

我发现这是因为我在 url 中放了一个请求变量

这个在我的路由器里

exports.index=function(req,res)
{
    console.log('success: '+req.url);
    var sesion_usuario=validate(req.params.code_user);//if not valid return null
    if(sesion_usuario){
        res.render('logged',{title:'Hello'+sesion_usuario})

这个在我的浏览器中

http://localhost:8000/YOGE7419

这在我的应用中

app.get('/:code_user',routes.index);

这就是我在提示中收到的内容

success: /YOGE7419
success: /YOGE7419
DEBUG: validate error: maxlength not match

以及其中的url变换

http://localhost:8000/YOGE7419#sthash.zp1bOY2d.dpbs

这是为什么???第一个和第二个请求之间发生了什么? tnx

应用配置

app.configure(function()
{
    app.use(express.favicon(__dirname + '/public/images/favicon.png')); 
    app.set('port',  8000 || process.env.PORT);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.set('view options',{layout:false});
    //app.use(express.logger('dev'));
    app.use(express.bodyParser({uploadDir:'./public/uploads/'}));
    app.use(express.cookieParser('nomatherwhatdoyoudobatman'));
    app.use(express.session());
    app.use(passport.initialize());
    app.use(passport.session());
    //app.use(express.methodOverride());
    app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
    app.use(function(req, res, next){
        res.render('404.jade',
            {
                title: "404 - Page Not Found",
                showFullNav: false,
                status: 404,
                url: req.url
            });
    });
});

【问题讨论】:

  • 如果您使用浏览器发出请求,那么第二个请求可能会被 brwoser 初始化以获取 /favicon.ico
  • 我提交了 favicon 并且还有第二个请求
  • 您的意思是当您的浏览器访问该网址时,您会收到双重请求? console.log('success', req.url) 将显示哪个 url 正在执行请求。如果是请求密码,则可以忽略此评论。
  • @Pickels req.url == /YOGE7419 提示打印成功:/YOGE7419 成功:/YOGE7419
  • 你认为它是请求密码吗??

标签: javascript node.js express


【解决方案1】:

如果 express 重定向浏览器,如果重定向未完成,浏览器将发送重复请求(根据我的经验是 5 秒后)。

通过向重定向请求添加超时,我能够避免重复请求:

app.get('/path2', function( req, res ) {
    req.connection.setTimeout( 1000 * 60 * 10 ); // ten minutes
    console.log('path2');
});

如需详细讨论,请阅读 GitHub Link

【讨论】:

    【解决方案2】:

    第一个请求是由浏览器自动发出的,它请求 favicon.ico,当然,第二个请求是针对 URL(您的 URl)的。

    更多参考

    http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多