执行组合查询时出现错误
我正在使用,续集和mysql
这是我的代码:
const makeAuthenticate = async (req, res) => {
const newOtp = Math.floor(100000 + Math.random() * 900000);
try {
const {phone} = req.body;
const [user, created] = await db.User.findOrCreate({
where: { phone: phone },
})
.then(e => {
db.User.update({ otp: newOtp }, {
where: {
phone: phone
}})
.then(f => res.status(200).json({
otp: newOtp
}))
.catch(err => res.status(500).json({error: err})) // Error comes from here !
})
.catch(err => res.status(500).json({error: err}))
} catch (error) {
return res.status(500).json({error: error.message})
}
}
这是代码的作用:
基本上,我在单个查询中同时进行注册和登录,换句话说,首先使用findOrCreate-我找到了该用户,或者我将创建一个新用户,然后我需要发送一次密码(临时6位数)数字”)到他们在流程中使用的电话号码。
因此,我正在将otp更新到我的用户表,然后我需要加总以将SMS发送给用户的调用(我尚未完成此操作),因此目前处于findOrCreate的阶段并进行另一个更新调用特定用户。
到此,出现如下错误:
UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
答案 0 :(得分:1)
尝试这样的事情
startStepFunctionMock
无需嵌套承诺,beforeEach(() => {
startStepFunctionMock.resetHistory();
});
可以使用const makeAuthenticate = async (req, res) => {
const newOtp = Math.floor(100000 + Math.random() * 900000)
const {phone} = req.body
try {
const [user, created] = await db.User.findOrCreate({
where: { phone: phone }
})
const updatedRes = await db.User.update({ otp: newOtp }, { where: { phone: phone }})
res.status(200).json({
otp: newOtp
})
} catch(e) {
res.status(500).json({error: err})
}
}
,因为.then()
使用承诺。
您的代码的主要问题是您在await
内使用了Sequelize
,他们俩都试图发送失败状态。因此,很可能您的问题出在其他地方,但这是一个副作用,当您运行我的代码时,应该看到真正的问题(如果存在)。