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

我正在尝试使用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: "",message: "User registered Successfully",data: rows[0],};
    }
});
nielovezxy 回答:为什么Koa ctx.body在if语句中不起作用?

在这种特殊情况下,电子邮件唯一性检查后功能执行未完成。设置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: "",message: "User registered Successfully",data: rows[0]
      };
    }
  }
});
本文链接:https://www.f2er.com/2896326.html

大家都在问