代码之家  ›  专栏  ›  技术社区  ›  Iseoluwa ariyibi

获取未定义的控制台后日志记录req.body

  •  0
  • Iseoluwa ariyibi  · 技术社区  · 9 月前

    我在将数据从客户端发布到服务器时遇到问题。具体来说,当我使用这个端点时,我不断地得到一个“未定义”的错误,而我的其他端点工作正常。我试着调试这个问题,发现当我控制台记录“req”对象时,我可以看到数据,但当我尝试使用“req.body”访问它时,我会得到“未定义”。

    对于上下文,我已经安装了主体解析器,并将其放置在调用端点之前。如果有人有任何想法或建议,我将不胜感激。提前感谢!

    我的服务器.js

    const express = require('express'); 
    const app = express(); 
    const port = 8002;
    const UserRouter = require('./controllers/user')
    const passwordResetRouter = require('./controllers/passwordReset')
    app.use(express.json())
    const cors = require('cors');
    app.use(cors());
    app.use(UserRouter);
    app.use(passwordResetRouter);
    app.listen(port, () => {
        console.log(`App listening on port ${port}`);
    });
    

    请注意,我的userRouter中的每个端点都正常工作,但在我的密码重置中,错误就显示在那里。
    这是我的密码ResetRouter代码

    const express = require('express')
    const router = express.Router();
    const bcrypt = require('bcrypt');
    router.post('/password-reset',(res,req)=>{
        console.log(req.body)
        const otp = req.body.otp;
        const currentTimeUserInputedOtp = new Date().toISOString().slice(0,19).replace('T', ' ');
        const checkOtpPassword = `SELECT * FROM password_reset WHERE otp = ? AND expired_at >= ? `;
        db.query(checkOtpPassword, [otp, currentTimeUserInputedOtp], (err,data) =>{
             if(err){
                console.log(err)
               return res.json('An error occurred')
            }else if(data.length > 0){
                const usersEmail = data[0].email
                const checkUserEmail = `SELECT * FROM users WHERE email = ?`
                db.query(checkUserEmail, [usersEmail], (err,data)=>{
                    if(err){
                        return res.json("An error Occurred")
                    } if(data.length > 0){
                        const usersNewPassword = req.body.newPassword;
                        bcrypt.hash(usersNewPassword, saltRoundsForBcrypt,(err, hashedPassword)=>{
                            if(err){
                                res.json('An error occured')
                            }else{
                                const updateUserPassword = `UPDATE users SET password = ? WHERE email = ?`
                                db.query(updateUserPassword, [hashedPassword, usersEmail], (err)=>{
                                    if(err){
                                        return res.json('An error occurred updating user password')
                                    }else{
                                        return res.json('Succesful')
                                    }
                                })
                            }
                        })
                       
                    }
                })
            }
            else{
              return res.json('Invalid otp')
             }
        })
    })
    module.exports = router;
    

    如果我的错误能得到纠正,我将不胜感激

    1 回复  |  直到 9 月前
        1
  •  0
  •   Aniket Raj    9 月前

    你有 交换的 这个 req 定位依据 res 错误地在中间件中。由于第一个参数用于 request , second 用于响应和 third 用于下一个中间件。

    Below is the correct way:

    router.post('/password-reset',(req,res)=>{
      console.log(req.body)
    })