Nodejs:将它们发送到后无法设置 headers
Nodejs: Cannot set headers after they are sent to the
我用 NodeJS 写这段代码:
const setOutput = (res, req, data) => {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(data));
}
app.post('/getDb', async (req, res, next) => {
if (!req.body.hasOwnProperty('key')) {
setOutput(res, req, {
error: true,
message: 'You must send key'
})
}
const db = openDb(req.body.key);
if (!db) {
setOutput(res, req, {
error: true,
message: 'Not found key'
})
}
setOutput(res, req, {
error: false,
message: 'DB create successful',
data: {
min: 0.1
}
});
})
此代码工作正常,但出现此错误:
(node:253965) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
调用后如何停止任何操作 setOutput
?
注意:我不想使用 switch
或很多 if
else
基本上,您正试图在一个请求中多次调用 setOutput 箭头函数。这就是为什么在发送后终止执行可能会有所帮助:
if (!req.body.hasOwnProperty('key')) {
setOutput(res, req, {
error: true,
message: 'You must send key'
})
return;
}
const db = openDb(req.body.key);
if (!db) {
setOutput(res, req, {
error: true,
message: 'Not found key'
})
return;
}
在您的请求中,您多次调用 setOutput,这意味着请求将被发送到客户端,但 app.post 中的回调函数继续执行,因为您没有 returned app.post 的回调中的任何内容你都调用了另一个函数,在这种情况下是 setOuput 所以在 nodejs 世界中错误只是意味着你现在无法准备 [=17] 向客户端发送响应=] 简单的解决方案是 return 像这样发送每个请求后
`
app.post('/getDb', async (req, res, next) => {
if (!req.body.hasOwnProperty('key')) {
return setOutput(res, req, {
error: true,
message: 'You must send key'
})
}
const db = openDb(req.body.key);
if (!db) {
return setOutput(res, req, {
error: true,
message: 'Not found key'
})
}
setOutput(res, req, {
error: false,
message: 'DB create successful',
data: {
min: 0.1
}
});
})
`
我用 NodeJS 写这段代码:
const setOutput = (res, req, data) => {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(data));
}
app.post('/getDb', async (req, res, next) => {
if (!req.body.hasOwnProperty('key')) {
setOutput(res, req, {
error: true,
message: 'You must send key'
})
}
const db = openDb(req.body.key);
if (!db) {
setOutput(res, req, {
error: true,
message: 'Not found key'
})
}
setOutput(res, req, {
error: false,
message: 'DB create successful',
data: {
min: 0.1
}
});
})
此代码工作正常,但出现此错误:
(node:253965) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
调用后如何停止任何操作 setOutput
?
注意:我不想使用 switch
或很多 if
else
基本上,您正试图在一个请求中多次调用 setOutput 箭头函数。这就是为什么在发送后终止执行可能会有所帮助:
if (!req.body.hasOwnProperty('key')) {
setOutput(res, req, {
error: true,
message: 'You must send key'
})
return;
}
const db = openDb(req.body.key);
if (!db) {
setOutput(res, req, {
error: true,
message: 'Not found key'
})
return;
}
在您的请求中,您多次调用 setOutput,这意味着请求将被发送到客户端,但 app.post 中的回调函数继续执行,因为您没有 returned app.post 的回调中的任何内容你都调用了另一个函数,在这种情况下是 setOuput 所以在 nodejs 世界中错误只是意味着你现在无法准备 [=17] 向客户端发送响应=] 简单的解决方案是 return 像这样发送每个请求后 `
app.post('/getDb', async (req, res, next) => {
if (!req.body.hasOwnProperty('key')) {
return setOutput(res, req, {
error: true,
message: 'You must send key'
})
}
const db = openDb(req.body.key);
if (!db) {
return setOutput(res, req, {
error: true,
message: 'Not found key'
})
}
setOutput(res, req, {
error: false,
message: 'DB create successful',
data: {
min: 0.1
}
});
})
`