NodeJS 未生成哈希密码节点J

jtoj6r0c  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(158)

我是nodejs和mongodb的初学者。我正在创建登录API使用节点js我试图添加密码哈希但无法插入.什么是错误的,在此代码可以检查出来.我附上了下面的模型。

型号

const mongoose = require("mongoose")
    var Schema  = mongoose.Schema;
    
    
    var studentSchema = new Schema(
        {
            name: {
                    type:String,
                    required: true
            },
            address: {
                type:String,
                required: true
            },
            phone: {
                type:Number,
                required: true
            },
            password:{
                type: String,
                trim: true,
                required : true
            }
    
        }
    )
    
    
     studentSchema.pre("save",async function(next){
        const student = this;
     if(user.isModified("password"))
     {
        student.password = await bcrypt.hash(student.password,8)
    }
     next()
    
     })
 module.exports =mongoose.model('student',studentSchema);

如何创建学生记录我附上下面的代码

添加学生

router.post('/student/create', async(req,res)=>{
   
    const student = new studentModel(req.body)
    try{
            await student.save();
            res.status(201).send(
                {
                    "status" : true,
                    "message" : "Student Created!!!!!!!!!!!!!!!!"
                });
    }
    catch(error)
    {
        res.status(400).send(error);

    }

});
5lhxktic

5lhxktic1#

在您的模型代码中,pre钩子中有一个小错误。不应使用user.isModified(“password”),而应使用student.isModified(“password”),因为在给定的代码中没有定义user。下面是模型的正确代码:

studentSchema.pre("save", async function (next) {
  const student = this;
  if (student.isModified("password")) {
    student.password = await bcrypt.hash(student.password, 8);
  }
  next();
});

在router.post代码中,您正在创建studentModel的新示例,但没有验证或处理与模型相关的任何错误。最好在将输入保存到数据库之前对其进行验证。下面是你的代码的更新版本,其中包括使用try-catch进行输入验证:

router.post('/student/create', async (req, res) => {
  try {
    const student = new studentModel(req.body);
    await student.validate(); // Validate the input data

    await student.save();
    res.status(201).send({
      status: true,
      message: "Student Created!!!!!!!!!!!!!!!!"
    });
  } catch (error) {
    res.status(400).send(error);
  }
});

在更新后的代码中,awaitstudent.validate()用于根据定义的模式验证输入数据。如果输入根据模式是无效的,它将抛出一个错误,该错误将被catch块捕获并作为状态码为400的响应发送。
确保在代码中导入了所需的模块,如mongoose和bcrypt。
这些更新应该有助于解决您面临的问题。如果您有任何进一步的问题或疑虑,请让我知道!

相关问题