快递发送后无法设置标题

我很喜欢这里的一个常见问题。 但我无法从任何地方获得解决scheme。 这里是我的代码:如果行不是空然后呈现代码页,否则执行另一个操作。

app.get('/send',function(req,res){ var code=req.query['c']; // -- get request from input connection.query("use mynum"); var strQuery = "select * from table WHERE code='"+code+"' LIMIT 1"; connection.query( strQuery, function(err, rows){ if(err) { throw err; }else{ if(rows.length==1){ res.render('pages/code', {code : rows[0].code}); connection.end(); res.end(); }else { // here is some actions } } }); res.end(); }); 

堆栈跟踪:

 Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (http.js:690:11) at ServerResponse.header (C:\wamp\www\vin_number\node_modules\express\lib\re sponse.js:666:10) at ServerResponse.res.contentType.res.type (C:\wamp\www\vin_number\node_modu les\express\lib\response.js:532:15) at ServerResponse.send (C:\wamp\www\vin_number\node_modules\express\lib\resp onse.js:121:14) at fn (C:\wamp\www\vin_number\node_modules\express\lib\response.js:900:10) at View.exports.renderFile [as engine] (C:\wamp\www\vin_number\node_modules\ ejs\lib\ejs.js:323:3) at View.render (C:\wamp\www\vin_number\node_modules\express\lib\view.js:93:8 ) at EventEmitter.app.render (C:\wamp\www\vin_number\node_modules\express\lib\ application.js:530:10) at ServerResponse.res.render (C:\wamp\www\vin_number\node_modules\express\li b\response.js:904:7) at Query._callback (C:\wamp\www\vin_number\server.js:102:6) 

您通过res.end()发送了两次响应。 摆脱第二个,你应该没问题。 此外,在res.end()之后调用res.end()是多余的,因为res.render()默认自动结束带有渲染结果的响应。

刚学过这个! 通过一个函数传递你的响应,检查响应是否已经发送:

 app.use(function(req,res,next){ var _send = res.send; var sent = false; res.send = function(data){ if(sent) return; _send.bind(res)(data); sent = true; }; next(); });