[英]Event Emmiter returns error 500 with express.js, it only gets 200 response over one event
在我的項目中,我有一些痛處,它會引發一些事件:
const express = require('express');
const EventEmitter = require('events');
/*Initialize Body parsers etc etc*/
const emmiter=new EventEmitter();
const emmitFunctionality=function(message){
if(message==='hello'){
return emmiter.emit("ok")
}
return emmiter.emit("fail");
}
express.post('/my-route',function(req,res,next){
emmiter.on('ok',function(){
res.json({status:true})
});
emmiter.on('fail',function(){
res.json({status:fail})
});
emmitFunctionality(req.message);
})
app.listen(80,function(){
console.log("Listening over port: 80");
});
但是當我嘗試執行以下http POST
請求時,我遇到了問題:
POST http:// localhost / my-route -d“ {message:'hello'}”
我盡力去做
POST http:// localhost / my-route -d“ {message:'harem'}”
我得到以下回應:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client<br> at validateHeader (_http_outgoing.js:503:11)<br> at ServerResponse.setHeader (_http_outgoing.js:510:3)<br> at ServerResponse.header (/opt/map/node_modules/express/lib/response.js:767:10)<br> at ServerResponse.send (/opt/map/node_modules/express/lib/response.js:170:12)<br> at ServerResponse.json (/opt/map/node_modules/express/lib/response.js:267:15)<br> at EventEmitter.emmiter.on (/opt/map/src/controllers/panel.js:42:9)<br> at EventEmitter.emit (events.js:164:20)<br> at module.exports.self.readAllLinesFromXLSXBufferAndProcessWithACallback (/opt/map/src/services/excell.js:41:20)<br> at /opt/map/src/controllers/panel.js:46:16<br> at Layer.handle [as handle_request] (/opt/map/node_modules/express/lib/router/layer.js:95:5)</pre>
</body>
</html>
你們是否知道發生這種情況的原因以及我將如何解決?
您應該檢查響應是否發送了標頭。 可以通過以下代碼完成:
if(!res.headersSent) {
//send response here
}
因此,在您的代碼中,通過/my-route
路由導致發布的部分將是:
express.post('/my-route',function(req,res,next){
emmiter.on('ok',function(){
if(!res.headersSent) {
res.json({status:true})
}
});
emmiter.on('fail',function(){
if(!res.headersSent) {
res.json({status:fail})
}
});
emmitFunctionality(req.message);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.