gpt4 book ai didi

javascript - 为什么Koa ctx.body在if语句中不起作用?

转载 作者:行者123 更新时间:2023-12-03 00:35:37 31 4
gpt4 key购买 nike

我正在尝试在带有koa和postgresql的节点中创建post RestApi。我有一个唯一的电子邮件验证,并且想检查电子邮件是否存在,它应该显示该邮件已经存在的消息用户。我的查询正在工作,但是ctx.body无法工作。该API每次都会创建新用户。当数据库中存在电子邮件时,应显示msg“该电子邮件已存在用户”。为什么我的ctx.body无法正常工作?希望你能理解。

router.post('/createNewUser', async (ctx) => {

var name = ctx.request.body.name;
var email = ctx.request.body.email;
var password = ctx.request.body.password;

if (
!name ||
!email ||
!password
) {
ctx.response.status = 400;
ctx.body = {
status: 'error',
message: 'Please fill all the fields'
}
} else {

await ctx.app.pool.query("SELECT * FROM users WHERE email = $1",
[`${email}`],
(err, result) => {
if(result.rows.length > 0){
ctx.body = {
exceptions: "",
status: 200,
error: false,
message: "user already exists with this email",
};
}
});

await ctx.app.pool.query(`INSERT INTO USERS (name,email,password) VALUES ('${name}','${email}','${bcrypt.hashSync(password, 10)}')`);
const {rows} = await ctx.app.pool.query("SELECT * FROM users ORDER BY id DESC LIMIT 1");

ctx.body = {
exceptions: "",
status: 200,
error: false,
message: "User registered Successfully",
data: rows[0],
};
}
});

最佳答案

在这种特殊情况下,电子邮件唯一性检查后功能执行不会完成。设置ctx.body不会从中间件返回。因此,它设置ctx.body,然后继续进行用户创建步骤。我的建议是根据错误处理模式重构代码(更多信息可以在https://github.com/koajs/koa/wiki/Error-Handling中找到)。

更新:

或者只是将用户创建步骤移至电子邮件唯一性检查,如下所示:

router.post("/createNewUser", async ctx => {
var name = ctx.request.body.name;
var email = ctx.request.body.email;
var password = ctx.request.body.password;

if (!name || !email || !password) {
ctx.response.status = 400;
ctx.body = {
status: "error",
message: "Please fill all the fields"
};
} else {
const { rows } = await ctx.app.pool.query("SELECT * FROM users WHERE email = $1", [`${email}`]);

if (rows.length > 0) {
ctx.body = {
exceptions: "",
status: 200,
error: false,
message: "user already exists with this email"
};
} else {
await ctx.app.pool.query(`INSERT INTO USERS (name,email,password) VALUES('${name}','${email}','${bcrypt.hashSync(password, 10)}')`);
const { rows } = await ctx.app.pool.query("SELECT * FROM users ORDER BY id DESC LIMIT 1");

ctx.body = {
exceptions: "",
status: 200,
error: false,
message: "User registered Successfully",
data: rows[0]
};
}
}
});

关于javascript - 为什么Koa ctx.body在if语句中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59399150/

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