ваша проблема с вашей цепочкой обещаний. в вашем первом .then
вы всегда устанавливаете ответ с помощью res
, но следующий .then
в цепочке пытается установить ответ снова. Обратите внимание, что не возвращать что-либо из обещания - это то же самое, что и return Promise.resolve(undefined);
.
вот как бы я это сделал:
User.getConfByID(userID)
.then((item) => {
if(item.length == 0)
return { statusCode: 400, body: { error: "NO_USER_FOUND" } };
else {
if(item[0].token == token) {
if((Math.abs(Date.now() - item[0].conf_iat)) > tokenValid)
return { statusCode: 401, body: { error: "TOKEN_INVALID" } };
else {
//not sure what this returns, but it looks like this is
//what you're trying to return the 200 for
mariaDBTemplates.updateOneRowTemplate("User_confirmation", { confirmed: 1 }, "user_id", userID);
return { statusCode: 200, body: { success: "CONFIRMED" } };
}
} else
return { statusCode: 401, body: { error: "TOKEN_NOT_SAME" } };
}
})
.then((result) => {
res.status(result.statusCode).json(result.body);
})
.catch((err) => {
res.status(500).json({ error: err.message });
});
Также обратите внимание, что возврат значения из обещания аналогичен возврату Promise.resolve(value);
и будет продолжать цепочку обещаний.