【发布时间】:2017-02-17 03:33:30
【问题描述】:
我正在使用 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:错误:错误:发送后无法设置标头。
在 ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
【问题讨论】:
-
我有点担心中间件函数会返回值,我认为你不应该在 redirectBasedReferrer 中有这些返回语句
-
基本上,当人们访问 /index 时,如果 URL 中有特定的跟踪代码,他们可能会被重定向到 /welcome
-
当然,我明白了。但是中间件返回语句并没有真正做任何事情,它们是回调,所以返回值没有任何用处。如果redirectBasedReferrer 是一个中间件,它可以通过将属性分配给
req或res对象来传递类似布尔值的值,但不能通过返回值。
标签: javascript node.js express