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

JNe*_*ens 1 javascript http node.js 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
Run Code Online (Sandbox Code Playgroud)

安慰:

GET /publication/view/123 200 490ms - 5623
GET /publication/view/123 304 458ms - -
Run Code Online (Sandbox Code Playgroud)

app.js:

var publication = require('./routes/publication');
app.use('/publication', publication);
Run Code Online (Sandbox Code Playgroud)

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});
});
Run Code Online (Sandbox Code Playgroud)

Leo*_*tny 10

这只是一个假设,但看起来您的浏览器使用某种预测算法甚至在您点击之前预先加载链接.谷歌Chrome做了这样的事情.

Express.js使用304 Not Modified响应回答了第二个响应,表明它是使用有效的ETag值发送的,以验证先前缓存的响应.

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

谷歌Chrome网络动作预测

或者,您可以尝试验证在您实际点击链接之前发送第一个请求,方法是将鼠标悬停在链接上,而不是单击它.