我遇到了错误的特定问题"在发送标题后无法设置标题"。
代码就是这个:
create: (request, response, next) ->
socket = @app.socket
#
# This method will be used to call the right method inside
# the emails service.
data = JSON.stringify(
Object.assign request.body.data, method: 'server'
)
socket.send data
socket.on 'message', (result) =>
result = JSON.parse(
result.toString()
)
if result.code is 'success'
@model.insertAsync request.body
.then (result) ->
response.json data: result
return
.catch next
return
return
我使用两台服务器和套接字连接来实现它们之间的通信。当我想要创建一个电子邮件时,我发送一条消息给这个其他服务器并等待结果,如果结果是"成功",我发回数据(我使用Ember,所以我需要在保存后发送数据)。现在的问题是:当我第一次发送电子邮件时,一切正常,当我第二次尝试时,我的终端显示错误信息:
Error: Can't set headers after they are sent.
根据快递,错误在这一行:
response.json data: result
或在JS中:
response.json({data: result});
纯JS中的代码:
create: function(request, response, next) {
var data, socket;
socket = this.app.socket;
data = JSON.stringify(Object.assign(request.body.data, {
method: 'server'
}));
socket.send(data);
socket.on('message', (function(_this) {
return function(result) {
result = JSON.parse(result.toString());
if (result.code === 'success') {
_this.model.insertAsync(request.body).then(function(result) {
response.json({
data: result
});
})["catch"](next);
}
};
})(this));
}
先谢谢你,伙计们!
答案 0 :(得分:2)
最有可能发生的事情是您收到多条成功的“消息”,因此它多次调用response.json()
。
您可以通过将on('message')
更改为once('message')
来解决此问题,以便事件处理程序仅执行一次。但是,如果该消息不成功,则不会发送响应。因此,您可能需要向else
添加if (result.code === 'success')
或离开on('message')
并引入某种保护变量,以便{{1}中的代码只执行一次。