Express:为啥这个 GET 请求执行了两次?

Posted

技术标签:

【中文标题】Express:为啥这个 GET 请求执行了两次?【英文标题】:Express: why is this GET request executed twice?Express:为什么这个 GET 请求执行了两次? 【发布时间】:2015-05-16 23:01:42 【问题描述】:

我有一些用 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);
);

【问题讨论】:

media-left 和 media-body 是否以某种方式重叠?在这种情况下,两个链接都可能会触发点击事件。 不,media-left 和 media-body 是 2 个独立的 div。我刚刚签入了生成的 html router 定义在哪里? @ExplosionPills 查看我对publication.js的编辑 @JNevens 您可以使用一些虚拟 paper.id 执行 curl 请求 curl baseURL/publication/view/#paper.id,以将问题缩小到前端或后端。还可以尝试记录request.url,在某些情况下会发出一个额外的请求来获取网站图标。 【参考方案1】:

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

Express.js 以304 Not Modified 响应响应第二个响应,这表明它以有效的ETag 值发送以验证先前缓存的响应。

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

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

【讨论】:

我觉得这个选项现在可能叫“使用预测服务来更快地加载页面”?【参考方案2】:

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

【讨论】:

请使用cmets提问【参考方案3】:

我遇到了同样的问题。

我发送的 html 页面包含... -image src='不存在'-

cause -> get resource 将被调用两次。

如果 src="" 为空或 src="图像存在"

get 资源只会被调用一次... 所以在我的情况下,缺少图片网址会导致这个问题......

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Express:为啥这个 GET 请求执行了两次?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 axios get 方法请求发送两次?

为啥我的对象更新为 MagicalRecord 持久存储执行了两次?

为啥我用ajax请求后台会请求两次,一次get,一次OPTIONS,求解决

为啥我的 Blade 模板内容显示两次?

php submit 提交了两次

feign调用了两次的问题