[英]i am creating a login- logut demo
当我发布到我的注册路线时,我正在使用以下代码检查数据库中的用户,但我的析构函数将用户显示为未定义,但我已经定义了用户
updateUser(userDetails){
User.find({}, function (err, foundItems){
console.log(foundItems[0].email)
const checkUserByEmail = foundItems.find((u)=> u.email === userDetails.email)
console.log(checkUserByEmail)
if(checkUserByEmail){
console.log("adsakhdsk")
return {
error : "user already exist"
}
}
const user = new User({
email : userDetails.email,
password: userDetails.password
})
user.save()
return {
user : userDetails
}
})
}
}
这是我注册用户的注册方法
register = (req, res) => {
const userDetails = {
email: req.body.email,
password: req.body.password,
}
const { user , error } = usersdb.updateUser(userDetails)
console.log([user , error])
}
我得到的错误
TypeError: Cannot destructure property 'user' of 'usersdb.updateUser(...)' as it is undefined.
at register (C:\Users\USER\Desktop\nodejs\login-logut-demo\api\auth\router.js:13:13)
at Layer.handle [as handle_request] (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:174:3)
at router (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:317:13)
at C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\express\lib\router\index.js:275:10)
at C:\Users\USER\Desktop\nodejs\login-logut-demo\node_modules\body-parser\lib\read.js:130:5
数据库请求是异步的。 我怀疑在您的情况下可能发生的情况是您尝试在 updateUser 方法完成从数据库检索数据之前读取“用户”的值。
我建议你看看 nodeJS promises & the await async syntax
updateUser(userDetails){
return new Promise((resolve, reject) => {
User.find({}, function (err, foundItems) {
console.log(foundItems[0].email)
const checkUserByEmail = foundItems.find((u) => u.email === userDetails.email)
console.log(checkUserByEmail)
if (checkUserByEmail) {
console.log("adsakhdsk")
resolve({
error: "user already exist"
})
}
const user = new User({
email: userDetails.email,
password: userDetails.password
})
user.save()
resolve({
user: userDetails
})
})
})
}
register = async (req, res) => {
const userDetails = {
email: req.body.email,
password: req.body.password,
}
const { user, error } = await usersdb.updateUser(userDetails)
console.log([user, error])
}
这是您的错误的可能解决方案
这里发生的是 updateUser 方法现在返回一个 Promise,可以使用 async/await 处理。
基本上,它使我们能够告诉程序,嘿,等到这段代码执行完毕。 当您调用resolve()
时 promise 结束,它会抛出reject()
异常
异步 function 返回的数据作为resolve()
回调的参数发送。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.