我有一個nodejs服務器,如下所示。當res.header()語句不在事件中時,服務器可以設置標題。服務器爲什麼第二次請求崩潰?
app.get('/m/ad', function (req, res) {
adManager.on('ad_unit_exists', function (ad_unit) {
res.header('Ad-Type',"html");
res.end();
return;
});
adManager.emit('ad_unit_exists',{});
});
編輯:當它在resposne像這樣執行事件失敗失敗的意義,服務器崩潰,出現以下錯誤:
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:526:11)
at ServerResponse.setHeader (/home/raj/node_modules/express/node_modules/connect/lib/patch.js:44:20)
at ServerResponse.header (/home/raj/node_modules/express/lib/response.js:242:10)
at EventEmitter.<anonymous> (/home/raj/Projects/adreactor-node/server.js:227:28)
at EventEmitter.emit (events.js:81:20)
at Object.<anonymous> (/home/raj/Projects/adreactor-node/server.js:232:16)
at nextMiddleware (/home/raj/node_modules/express/lib/router/index.js:139:34)
at param (/home/raj/node_modules/express/lib/router/index.js:147:16)
at pass (/home/raj/node_modules/express/lib/router/index.js:155:10)
at Object.router [as handle] (/home/raj/node_modules/express/lib/router/index.js:161:6)
爲什麼你認爲這是什麼?
編輯:這些請求完美適用於第一個請求。服務器在第二個請求上崩潰。
增加了一個編輯:第一個請求起作用。第二個請求使上述錯誤崩潰了服務器。 – rsman
我不太明白你想要在這裏實現什麼。爲什麼你發出一個事件並同時聽取它? adManager究竟是什麼?你爲什麼要使用事件而不是回調? – pkyeck
你能幫我更好地理解我的類似問題:http://stackoverflow.com/questions/20795401/can-someone-explain-this-eventemitter-causes-failure-when-global-variable?謝謝。 – Setheron