node.js - 错误:在 res.render() 调用后发送标头后无法设置标头
问题描述
我收到以下错误:
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at Array.write (D:\UberGo\node_modules\finalhandler\index.js:285:9)
at listener (D:\UberGo\node_modules\on-finished\index.js:169:15)
at onFinish (D:\UberGo\node_modules\on-finished\index.js:100:5)
at callback (D:\UberGo\node_modules\ee-first\index.js:55:10)
at IncomingMessage.onevent (D:\UberGo\node_modules\ee-first\index.js:93:5)
at emitNone (events.js:106:13)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9)
我的控制器:
app.get('/rider/history', function(request, response,next) {
rideHistory=[];
rhController.getAllRides(request.session.riderId, function (err, result) {
if (err) return handleError(err);
if (result.length > 0) {
response.render('rider_history.html',{
rideHistory: JSON.stringify(result),
Title: config.title.history,
moment: moment
});
response.end();
}
});
var Projection = {
__v : false,
_id : false,
};
exports.getAllRides = function(riderId, callback){
rideHistory.find({RiderId: riderId},Projection, callback);
};
当我渲染我的页面时,它工作正常,但在调用后JSON.stringify()
我收到上述错误。我不知道如何解决它或我做错了什么?
我想将骑手数据显示到谷歌地图中,并且返回的数据没有格式化。这就是我必须使用 JSON.stringify(stringify) 的原因。
解决方案
不要同时使用渲染和结束方法。如果您两次或多次使用响应方法,则会发生错误:发送后无法设置标头
您不需要在 express 中使用 response.end 方法。删除它,然后您的代码将起作用。
render 方法已经包含了 end 特性。
推荐阅读
- ssrs-2012 - SSRS 将 Total 引入 Matrix/Tablix
- html - 垂直 div 和对齐之间的空间
- msbuild - VSTS 中 DataRoot 的路径,用于 USQL 构建定义,USQLTargetType=SyntaxCheck 用于托管代理
- python - 强制 Keras 创建自定义层的不同实例
- java - 实现授权码流授权类型 OAuth2
- logstash - jdbc_streaming 过滤器插件性能
- microsoft-graph-api - Microsoft Graph Sharepoint 搜索结果不一致
- c++ - 与系统和正常路径相同的路径包括 CMake
- tableau-api - 如何将 2 条 y 轴趋势线合并为 1 条,无法使用“双轴”
- c - How do I remove garbage values from the backtracking algorithm?