javascript - 错误: Error: Can't set headers after they are sent

标签 javascript node.js express

我正在使用express和node.js

目标:当用户访问/index时,如果url中有特定的跟踪代码,则将其重定向到/welcome。函数redirectBasedReferrer根据跟踪代码进行重定向。

index: function (req, res, next) {
    // We can't cache the index because it serves different things depending on cookies.
    res.set('X-Frame-Options', 'SAMEORIGIN');
    CacheControl.private().maxAge(0).setHeaders(res);

    if (!req.imsProfile && !this.redirectBasedReferrer(req, res, next)) {
        return this.about(req, res, next);
    }
    res.render('spark', {
        analyticsURI: Settings.getSetting('analytics').siteCatalystScriptURI
    });
},

redirectBasedReferrer: function (req, res, next) {
    if (!req || !req.query) {
        return false;
    }
    var referringtrackingCode = req.query.promoid;
    if (!referringtrackingCode || referringtrackingCode != "SYBNM49C") {
        return false;
    }
    return res.redirect('/welcome');
},

当代码到达redirectBasedReferrer 并将用户重定向到/welcome 时,我收到错误:

/?promoid=SYBNM49C&mv=other : Error: Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)

最佳答案

此错误意味着您以某种方式设法在同一路由中返回响应两次。我并不能立即看出发生这种情况的地方,但我会说向用户返回错误响应可能是有意义的,而不是仅仅返回 false。但除此之外,也许您在其他地方有一些中间件错误地过早地向用户返回响应但没有结束该过程,因此它会继续尝试再次向用户返回响应并抛出错误。

编辑:

现在您已经更新了代码,我看到了错误。这一行:

if (!req.imsProfile && !this.redirectBasedReferrer(req, res, next)) {

将导致中间件潜在地重定向用户,但仍继续执行索引路由,从而导致错误。

关于javascript - 错误: Error: Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42282325/

相关文章:

javascript - 有没有办法检测 AMD 加载程序中的 404 错误?

javascript - Chromium如何将拖动和/或按住转换为单击?

node.js - 监控 Node.js 发送的请求 header

javascript - 如何在不位于模型文件夹中的情况下创建普通 sails 模型

javascript - axios中POST请求中发送参数

javascript - 尝试在 javascript 中创建一个计数器对象

javascript - 仅当事件位于具有特定类的 dom 元素之外时才触发事件

node.js - bot 框架 v4 相当于 Session.delay()?

javascript - 如何删除匹配的 req.params.id 的对象

javascript - Express.js 中间件可以依赖链中之前的中间件吗?