以下是Express.js中的路由定义:
// Building specific routes defined by a route file
routes.use(this.initialize.bind(this));
routes.use(this.isAuthenticated.bind(this));
routes.use(this.isAuthorized.bind(this));
if (Route.METHOD == 'POST') {
routes.use(route.post.bind(route));
} else {
routes.use(route.get.bind(route));
}
routes.use(this.finalize.bind(this));
router.use('/webstore/' + Route.RESOURCE + (parameters.length != 0 ? '/' : '') + parameters.join('/'), routes);
//router.use('/webstore/session', routes);
// Building generic routes
console.log('Creating GET route: ' +
'/:connectionName(webstore|localdatastore)/:objectName');
router.get('/:connectionName(webstore|localdatastore)/:objectName',
this.initialize.bind(this), this.isAuthenticated.bind(this), this.isAuthorized.bind(this), this.get.bind(this), this.finalize.bind(this));
console.log('Creating POST route: ' +
'/:connectionName(webstore|localdatastore)/:objectName');
router.post('/:connectionName(webstore|localdatastore)/:objectName',
this.initialize.bind(this), this.isAuthenticated.bind(this), this.isAuthorized.bind(this), this.get.bind(this), this.finalize.bind(this));
如果我尝试访问通用路由,例如上面两行中定义的/webstore/user
,我的代码工作正常,但是,如果我尝试使用路由文件中定义的特定路由,例如{ {1}},我收到此错误:
/webstore/session
我希望我的API保持平稳,而不必添加别名来删除此错误。如何防止Express设置标头,因为通用和已定义的路径会发生冲突?
答案 0 :(得分:2)
因为您正在尝试发送不可能的第二个响应。 检查以下行和它'内容。
routes.use(this.finalize.bind(this));
router.use('/webstore/' + Route.RESOURCE + (parameters.length != 0 ? '/' : '') + parameters.join('/'), routes);
基本上当你在某些路线上有这个时:
res.send("...");
您可以在其他一些中间件路由中执行此操作
res.send("....");
你得到了那个错误。
将以下代码添加到finalize方法和任何404/500错误处理程序,以防止再次发送标头。但是,如果存在会话操作,数据库调用等,代码仍在处理两个分支中的所有逻辑。
if (res.headersSent) {
return next();
}