【问题标题】:expressjs middleware firing twiceexpressjs 中间件触发两次
【发布时间】:2018-01-16 17:32:23
【问题描述】:

如果用户未通过身份验证,我会尝试限制所有页面。

奇怪的是,当我调用登录页面时,我的中间件被调用了两次。

以下是我的代码

app.use((req, res, next) => {
    if (req.session.user) {
        res.session.user = req.session.user;
    }
    if (req.isAuthenticated() || req.path === '/' || req.path === '/login'){
        console.log('inside next');
        next()
    }else{
        console.log('inside redirect');
        res.redirect('/')
    }
});
app.get('/', (req, res) => {

    console.log('inside /')

    res.render('./login', {
        css: ['login.css'],
        js: ['login.js']
    })
});

当我转到我的根页面localhost:8000/ 时,它会在控制台中打印出以下内容

inside next
inside /
inside redirect
inside next
inside /

正如你在调用get('/') 之后看到的,再次调用中间件来重定向页面。为什么是这样?如果我删除中间件,/ 只会被调用一次。

【问题讨论】:

  • 您如何调用该服务。可能与客户端代码有关。
  • @SamuelToh 你是什么意思?你想看代码的哪一部分
  • @SamuelToh 正如我所说,/ 仅在我添加中间件时才会呈现两次,所以我猜这与此有关。
  • 调用//login的客户端javascript。也许您的login 页面在页面加载时正在调用/login 端点?

标签: node.js express


【解决方案1】:

我发现了原因……

显然 Chrome 最近增加了对 source map ESRI : Failed to parse source map的支持

由于我的vendor文件夹中没有包含源映射,因此找不到源映射并刷新页面。

所以从现在开始在复制引导文件时要小心 - 使用 css 文件复制源映射,这样它就不会刷新两次

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2014-04-07
    • 2013-03-28
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多