gpt4 book ai didi

javascript - 设置状态后无法发送响应

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:21:17 26 4
gpt4 key购买 nike

我在我的 express 中创建了一个路由,它在提交时处理一个表单。
我正在尝试设置状态并在表单流程遇到错误或问题时向客户端发送响应。
我正在使用 FormData()在前端和formidable在后端。
这是我尝试处理方法回调中的错误的方式:

if (err) {
res.status(500) // i have tried different status-codes !
.send(`error on parsing : ${err}`)
.end();
}

问题是:
1_ 如果我设置了大部分状态代码(除了 200 之外的几乎所有状态代码),那么我会收到一个响应说请求失败,状态代码为 500(或我设置的其他代码)并且 .send() 方法发送的数据不是客户端接收

2_ .send() 带或不带 .end() 都不会停止要执行的其余代码,因为如果遇到错误,我试图结束回调中的响应,否则最后会出现 200 状态-代码已发送,代码执行到最后并到达最后,它尝试再次设置状态,当它们被发送到客户端时我得到错误无法设置 header

我试过用不同的方法设置状态码或用其他方式发送响应。
我在网上搜索,发现正确的方法是 res.status().send() 并且我做的是正确的,但是我遇到了问题。

这是我的代码(如果你需要我可以粘贴完整代码):

app.post("/upload", (req, res) => {
var form = new formidable.IncomingForm();
form.on("error", err => {
if (err) {
res
.status(500)
.send(`Error on formidable : ${err}`)
.end();
console.log('continued');
}
});


form.encoding = "utf8";
form.uploadDir = "./uploadedFiles/";
form.maxFileSize = 2000 * 1024 * 1024;
form.parse(req, (err, fields, files) => {
if (err) {

res.status(500)
.send(`error on parsing : ${err}`)
.end();

}
// code continues with same style , methods with error handling in call backs
//at the end of code :
res.status(200).send("form successfully Submitted !");
}

客户端代码的“获取响应”部分:

try {
let response = await axios.post("/upload", FD, {
"Content-Type": "multipart/form-data"
});
console.log(response);

$("#res")
.css("display", "block")
.text(response.data);
$("#spinnerbox").css("display", "none");
} catch (error) {
$("#res")
.css("display", "block")
.text(error);
console.log("Catched Error");
}

我希望当我设置状态时我也能够发送响应。 (因为我搜索了 res.status().send() 应该是正确的)。
我将不胜感激你的帮助。

最佳答案

您最好的解决方案是使用 try 和 catch block 然后抛出新错误并创建错误中间件然后你可以设置状态代码并调用下一个错误

app.get('/route', (req, res, next) => {
try {
// do something
if ('something failed') {
throw new Error('error message!');
}
} catch (err) {
next(err);
}
});

// or if you want to set the status code

app.get('/route', (req, res, next) => {
try {
// do something
if ('something failed') {
res.status(500);
const error = new Error('error message!');
next(error);
}
} catch (err) {
next(err);
}
});

关于javascript - 设置状态后无法发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57558592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com