gpt4 book ai didi

javascript - NodeJS - 发送到客户端后无法设置 header

转载 作者:行者123 更新时间:2023-12-01 01:01:26 24 4
gpt4 key购买 nike

所以我四处搜寻,发现要解决上述问题,我必须在发送回复后返回。但我的问题是,即使我已经返回,我仍然有错误。

const dbEditCourse = (req, res, db, logger) => {
let {
origCourse, code, description, type
} = req.body;
if (!code || !description || !type) {
res.json({
haveEmpty: true
});
return;
}
db.transaction((trx) => {
db.select('*').from('course_strand').where('code', '=', code)
.then(data => {
if (data[0]) {

//error happens in this block of code
res.json({
isSuccess: false
});
return;
//i also tried return res.json({ isSuccess: false });

}
//wrapping this in 'else' also does not work
return db('course_strand')
.returning('*')
.where('code', '=', origCourse)
.update({ code, description, type })
})
.then(course => {
return db('activity_logs')
.returning('*')
.insert({
date: new Date(),
employee_id: req.session.emp_id,
module: "COURSE / STRAND",
activity: "EDIT"
})
})
.then(activity => {
if (activity[0]) {
res.json({
isSuccess: true
});
return;
} else {
res.json({
isSuccess: false
});
return;
}
})
.then(trx.commit)
.catch(err => {
logger.error(err);
trx.rollback;
res.render('pages/error-500');
});
})
.catch(err => logger.error(err));
}

module.exports = {
dbEditCourse
}

我正在做的事情是产生错误,如果记录存在,它将进入上面的代码块。除了特定的代码块之外,我在其他地方没有遇到错误。即使我有错误,代码也可以正常工作。

最佳答案

您不能使用 return 关键字破坏 promise 链,所有 .then 语句都将被执行(不包括您在 .then 中抛出错误), res.json 已被调用多次。

处理 catch block 中的所有错误(包括您的错误和系统错误)。

在catch block 中,检查您是否抛出错误以返回响应。

const dbEditCourse = (req, res, db, logger) => {
let {
origCourse, code, description, type
} = req.body;
if (!code || !description || !type) {
res.json({
haveEmpty: true
});
return;
}

// util throw a error
const breakWithMyError = () => {
throw new Error("MY_ERROR");
}

db.transaction((trx) => {
db.select('*').from('course_strand').where('code', '=', code)
.then(data => {
if (data[0]) {

//error happens in this block of code
breakWithMyError();
//i also tried return res.json({ isSuccess: false });

}
//wrapping this in 'else' also does not work
return db('course_strand')
.returning('*')
.where('code', '=', origCourse)
.update({ code, description, type })
})
.then(course => {
return db('activity_logs')
.returning('*')
.insert({
date: new Date(),
employee_id: req.session.emp_id,
module: "COURSE / STRAND",
activity: "EDIT"
})
})
.then(activity => {
// revert logic, we check for error case first
if (!activity[0]) {
breakWithMyError();
}
})
.then(trx.commit)
.then(() => {
// finally you can run to here without any error
res.json({
isSuccess: true
});
})
.catch(err => {
// If you any error, the error comes form `breakWithMyError` or any things.
if (err.message === "MY_ERROR") {
// the error throw by `breakWithMyError`
return res.json({
isSuccess: false
});
}
logger.error(err);
trx.rollback;
// Why you return a html page in failed case? `res.status(500).json({message: "Internal server!"});`
res.render('pages/error-500');
});
})
.catch(err => logger.error(err));
}

module.exports = {
dbEditCourse
}

关于javascript - NodeJS - 发送到客户端后无法设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56033671/

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