我正在使用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/