我是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);
}
});
1条答案
按热度按时间5lhxktic1#
在您的模型代码中,pre钩子中有一个小错误。不应使用user.isModified(“password”),而应使用student.isModified(“password”),因为在给定的代码中没有定义user。下面是模型的正确代码:
在router.post代码中,您正在创建studentModel的新示例,但没有验证或处理与模型相关的任何错误。最好在将输入保存到数据库之前对其进行验证。下面是你的代码的更新版本,其中包括使用try-catch进行输入验证:
在更新后的代码中,awaitstudent.validate()用于根据定义的模式验证输入数据。如果输入根据模式是无效的,它将抛出一个错误,该错误将被catch块捕获并作为状态码为400的响应发送。
确保在代码中导入了所需的模块,如mongoose和bcrypt。
这些更新应该有助于解决您面临的问题。如果您有任何进一步的问题或疑虑,请让我知道!