Express:为什么这个GET请求被执行了两次?

时间:2015-03-14 13:38:37

标签: javascript node.js http express pug

我有一些用Jade编写的代码,里面有一个链接。链接的目的地由Jade生成。单击链接时,我从控制台注意到GET请求正在执行两次。

  

这是为什么?我该如何解决这个问题?

这是我的代码:

玉文件

ul.media-list
    each paper in paperList
        div.panel.panel-default
            div.panel-body
                li.media
                    div.media-left.media-middle
                        a(href='/publication/view/#{paper.id}')
                            | Some image
                    div.media-body
                        div.btn-group(role='group')
                            //!!! When this link is being clicked, GET is executed twice !!!
                            a.btn.btn-default(href='/publication/view/#{paper.id}')
                                | View

控制台:

GET /publication/view/123 200 490ms - 5623
GET /publication/view/123 304 458ms - -

app.js:

var publication = require('./routes/publication');
app.use('/publication', publication);

publication.js:

var express = require('express');
var router = express.Router();

router.get('/view/:id', function (req, res) {
    var data;
    //Some database functions here
    //Just an example
    res.render('publication', {someData: data});
});

2 个答案:

答案 0 :(得分:9)

这只是一个假设,但看起来您的浏览器甚至在点击它们之前就使用某种预测算法来预加载链接。 Google Chrome do such things

Express.js通过304 Not Modified响应回复了第二个响应,表明它已发送时带有有效ETag值,以验证以前缓存的响应。

尝试在浏览器中禁用网络操作预测。以下是它在Google Chrome设置中的显示效果(Settings - > Show advanced settings...):

Google Chrome network actions prediction

或者,您可以尝试在实际点击链接之前通过将鼠标悬停在链接上来验证是否发送了第一个请求,而不是点击它。

答案 1 :(得分:0)

它的Chrome问题没有在Firefox或资源管理器中发生