Javascript 如何使用异步和等待在膝关节炎?

Javascript 如何使用异步和等待在膝关节炎?,javascript,node.js,postgresql,koa,koa-router,Javascript,Node.js,Postgresql,Koa,Koa Router,我已经创建了一个简单的登录api,但出现了404错误。我怎样才能解决这个问题?我的ctx身体不工作。当我碰到邮递员时,它没有找到 router.post('/login', async (ctx, next) => { var phone= ctx.request.body.phone; var password = ctx.request.body.password; await ctx.app.pool.query("SELECT * FROM u

我已经创建了一个简单的登录api,但出现了404错误。我怎样才能解决这个问题?我的ctx身体不工作。当我碰到邮递员时,它没有找到

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

    var phone= ctx.request.body.phone;
    var password = ctx.request.body.password;


        await ctx.app.pool.query("SELECT * FROM users WHERE phone= $1",
            [`${phone}`],
            async (err, result) => {
               if (result) {
                   await bcrypt.compare(password, result.rows[0].password).then(function (res) {

                        if (res === true) {
                            ctx.body = {
                                status: 200,
                                message: "login successfully",
                                data: result.rows[0],
                            };
                        }else{
                            ctx.body = {
                                status: 400,
                                message: "Incorrect password! Try again.",
                            }
                        }
                    });
                }else{
                    ctx.body = {
                        status: 400,
                        message: "Invalid phone",
                    }
                }
            });
});

首先,不要将异步与回调混合使用&
然后

使用
const res=wait somepromise()

您对查询使用了回调,对bcrypt.compare使用了
然后
,而不是等待它

router.post('/login',异步(ctx,next)=>{
const phone=ctx.request.body.phone;
const password=ctx.request.body.password;
const result=await ctx.app.pool.query(“从phone=1的用户中选择*,[`${phone}`]))
如果(结果){
const pwrcorrect=wait bcrypt.compare(密码,结果.行[0].密码)
如果(pwCorrect==true){
ctx.body={
现状:200,
消息:“登录成功”,
数据:result.rows[0],
};
}否则{
ctx.body={
现状:400,
消息:“密码不正确!请重试。”,
}
}
}否则{
ctx.body={
现状:400,
信息:“无效电话”,
}
});

您正在使用什么数据库库?很可能您正在添加一个回调函数作为查询的参数。这就是为什么它不等待响应。const res=wait ctx.app.pool.query(“select..”,[“param])if(res){//do stuff here}@Tobias我使用的是postgresql数据库,没有库只使用原始查询,所以您使用的是“pg”节点模块?只是不要像您那样传递回调函数。请参阅我之前的response@TobiasLins我试过了,但如果我放错了电话,它就会抛出500个错误。