Node.js 在接到客户机同时呼叫时快速中断
由于客户端中的错误,每次发送表单时,我的node/express API都会两次同时收到完全相同的PUT请求 作为响应,服务器总是崩溃,出现以下错误:Node.js 在接到客户机同时呼叫时快速中断,node.js,http,express,Node.js,Http,Express,由于客户端中的错误,每次发送表单时,我的node/express API都会两次同时收到完全相同的PUT请求 作为响应,服务器总是崩溃,出现以下错误: Error: Can't set headers after they are sent 现在我修复了客户端,这样服务器就不会再崩溃了,但我想正确地修复API。任何人都可以通过同时发送两个PUT请求来杀死我的服务器 因此,我的问题是: 如何最好地处理Express中的“无法设置标题”错误 我的服务器代码中的错误是什么导致了错误的发生 这是我
Error: Can't set headers after they are sent
现在我修复了客户端,这样服务器就不会再崩溃了,但我想正确地修复API。任何人都可以通过同时发送两个PUT请求来杀死我的服务器
因此,我的问题是:
- 如何最好地处理Express中的“无法设置标题”错误
- 我的服务器代码中的错误是什么导致了错误的发生
还想知道我是否可以用绑定(res)来代替吗?您错过了一个返回,因此当出现错误时,您调用了
res.send
两次。返回后,执行将在第一次返回后停止
我知道你想为你的后续问题做些什么,但是创建一个全局变量r
肯定是不是一个好方法。我这样做的方式是将res
传递给后续函数-见下文。也许有更好的办法,但至少这似乎是合理的
exports.update = function(req, res) {
var u = {
$set: {}
}
for(var x in req.body){
if (['name','stages'].indexOf(x)>=0)
u.$set[x] = req.body[x];
}
Pipeline // this is a mongoose object
.findOneAndUpdate({'_id.id':req.params.id},u,{new:true})
.exec(function(err, data) { respond(err, data, res) });
}
function respond(err, data, res) {
if (err) {
return res.send(err);
}
return res.json(data);
}
谢谢,这很有道理,我更新了我的代码。但仍然没有修复,exec没有给出err。我认为您需要查看代码中的其他地方。您可以尝试节点检查器来跟踪发生的情况Hanks,我发现了一个错误,因为我没有一字不差地粘贴代码,这是我的错。你能帮我打捆吗?我接受你的回答。
var r = {};
exports.update = function(req, res) {
r = res;
var u = {
$set: {}
}
for(var x in req.body){
if (['name','stages'].indexOf(x)>=0)
u.$set[x] = req.body[x];
}
Pipeline // this is a mongoose object
.findOneAndUpdate({'_id.id':req.params.id},u,{new:true})
.exec(respond);
}
function respond(err, data) {
if (err) {
return r.send(err);
} else {
return r.json(data);
}
}
exports.update = function(req, res) {
var u = {
$set: {}
}
for(var x in req.body){
if (['name','stages'].indexOf(x)>=0)
u.$set[x] = req.body[x];
}
Pipeline // this is a mongoose object
.findOneAndUpdate({'_id.id':req.params.id},u,{new:true})
.exec(function(err, data) { respond(err, data, res) });
}
function respond(err, data, res) {
if (err) {
return res.send(err);
}
return res.json(data);
}