簡體   English   中英

我正在創建一個登錄-注銷演示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM