userId:CastError:由于“BSONError”,在路径“userId”处将值“64e310ad9d821c557b4f9bc7”(类型字符串)转换为ObjectId失败

问题描述 投票:0回答:1

我将“id”传递给 EJS 中的隐藏输入值,但收到 bson 错误,数据仍正确存储在数据库中,但错误显示在 EJS 文件中

出现错误的form.ejs文件

form.ejs

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Document</title>
 </head>
 <body>
     
     <form action="/createform" method="post">
         <label>Email:</label>
         <input type="email" name="email"/><br>
         <label>Phone no:</label>
         <input type="number" name="number"/>
         <input type="hidden" name="userid" value=" <%= result._id %> ">
         <button type="submit">Submit</button>
     </form>
 </body>
 </html>

调用 form.ejs 的用户控制器文件

userController.js

exports.postAddAnotherUser = async (req, res, next) => {
  const name = req.body.name
  const age = req.body.age
  try {
   
    const result = await User.create({
      name: name,
      age: age,
    });
    console.log(result._id.toString());
    const value = result._id
    console.log(typeof(value))
    res.render("form", {result:result })
  } catch (error) {
    console.log(error);
  }
};

createForm 完美执行

formController.js

exports.createForm = async (req,res,next) => {
    const userid = req.body.userid
    const email = req.body.email
    const number = req.body.number
 
    console.log(userid);
    console.log(email);
    console.log(number);


    try {
        const result = await Form.create({
            userId: userid, 
            email:email,
            phone:number
            
        })
        console.log(result);
        res.redirect("/form")
       
    } catch (error) {
        console.log(error);
    }
}

exports.form = (req,res,next) => {
    res.render("form")
}

formModel.js

const FormData = new scheme({
    userId:{
        type: scheme.Types.ObjectId,
        ref: "User"
    },
    email:{
        type: String,
        required: false
    },
    phone:{
        type: Number,
        required: true
    }
})

我已经尝试了所有可能的方法,但我认为它源于 EJS,因为数据确实存储在数据库中,但错误仍然被抛出。 我们正在做 json.toString 但在输入字段的 value 属性中它显示我们正在传递 objectId。

node.js express ejs
1个回答
0
投票

我们为您提供了您看到错误的图像 **写在formController.js最后一行**

 res.render("form", {result:result })

© www.soinside.com 2019 - 2024. All rights reserved.