自己学习模仿某视频站的示例, 课程用的是express, 我想修改成koa2的.遇到了好多坑. 问题如下; //用户注册 exports.signin = async (ctx, next) => { var _user = ctx.request.body.user var name = _user.name var password = _user.password
User.findOne({name: name}, function (err, user) {
if (err) {
console.log(err)
}
if (!user) {
console.log('用户不存在')
ctx.redirect('/admin/list');
}
user.comparePassword(password, user.password, function (err, ismatch) {
if (err) {
console.log(err)
}
if (ismatch) {
console.log('password is matched')
ctx.redirect('/admin/list');
} else {
console.log('password is not matched')
}
})
})
} // user.comparePassword 自定义的实例方法 UserSchema.methods = { comparePassword: function (_password, hash, cb) {
bcrypt.compare(_password, hash, function (err, ismatch) {
if (err) {
return cb(err)
}
cb(null, ismatch)
})
}
} 代码运行到 if (ismatch) { console.log(‘password is matched’) ctx.redirect(’/admin/list’); } 就会报错, xxxxxx 求达人告知正确的姿势…这个问题困扰我很久,求助,在线等
包promise就好了
i5ting 请问这个该怎么包啊…能不能帮帮忙…
User.findOne({name: name}, function (err, user) {
改成promise写法。
function xxxx(){
return new Promise(function(resolve, reject){
User.findOne({name: name}, function (err, user) {
if(err) reject(err)
resolve(user)
})
})
}
然后利用koa2中间件原理
return xxxx().then(next).then(function(){
// after
})
大意就是这样
@i5ting 太感谢你了! 我研究研究
可能对 Express 和 Koa 的编程模型不太熟悉吧。前者是 callback 友好型的,后者是 Promise 友好型的,一个是顺序中间件,一个是洋葱模型的中间件。 现在普遍用 async /await 来写 Koa 了
@DevinXian Koa2的三种中间件最好都掌握
@i5ting 桑大提醒的是
@i5ting 研究了一天,一晚上. 依然头痛没解决, 很慌. 狼哥, 既然写了一个小demo, 何不直接把demo中user的那一部分写的更完整一些, 比如写一个user的curd,注册登录.抱歉,不知道这中要求过分不. 我想这样可以帮助更多的新手…至少一定能帮到我 …