Javascript 如何使用异步和等待在膝关节炎?
我已经创建了一个简单的登录api,但出现了404错误。我怎样才能解决这个问题?我的ctx身体不工作。当我碰到邮递员时,它没有找到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
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个错误。