Node.js 使用bcryptjs将哈希密码保存到数据库时出错

Node.js 使用bcryptjs将哈希密码保存到数据库时出错,node.js,mongodb,bcrypt,Node.js,Mongodb,Bcrypt,我正在使用node.js和bcryptjs注册一个新用户,并将他们的姓名/电子邮件/密码保存到mlab中的mongoDB 这是我的密码 const express=require(“express”); const router=express.router(); const gravatar=require(“gravatar”); const bcrypt=require(“bcryptjs”); //负载用户模型 const User=require(“../../models/User

我正在使用node.js和bcryptjs注册一个新用户,并将他们的姓名/电子邮件/密码保存到mlab中的mongoDB

这是我的密码

const express=require(“express”);
const router=express.router();
const gravatar=require(“gravatar”);
const bcrypt=require(“bcryptjs”);
//负载用户模型
const User=require(“../../models/User”);
//@route-GET-api/users/test
//@desc测试用户路由
//@access-Public
get(“/test”,(req,res)=>res.json({msg:“Users Works”}));
//@route-GET-api/users/register
//@desc寄存器用户
//@access-Public
路由器.post(“/寄存器)”,(请求,res)=>{
findOne({email:req.body.email})。然后(User=>{
如果(用户){
返回res.status(400).json({email:“电子邮件已存在”});
}否则{
const avatar=gravatar.url(req.body.email{
s:“200”//尺寸
r:“pg”,//额定值
d:“mm”//默认值
});
const newUser=新用户({
名称:req.body.name,
电子邮件:req.body.email,
阿凡达
密码:req.body.password
});
bcrypt.genSalt(10,(错误,盐)=>{
bcrypt.hash(newUser.password,salt,(err,hash)=>{
如果(错误)抛出错误;
newUser.password=hash;
新用户
.save()
.then(user=>res.json(user))
.catch(err=>console.log(err));
});
});
}
});
});
//@route-GET-api/users/login
//@desc登录用户/返回JWT令牌
//@access-Public

module.exports=路由器
您似乎正在向
bcrypt.hash
传递一个
未定义的
密码

为了确保它不会到达该点,请添加早期验证,可能在POST路线的第一行:

router.post("/register", (req, res) => {
  const {email, password} = req.body
  if (!email || !password) {
    return res.send('Must include email and password')
  }
  ...
})

newUser.password
包含什么?把它记录在一个请求上,并找出答案。该错误将指示这是未定义的。。您是正确的,它将返回未定义。。现在我试图找出原因。从
req.body
开始。记录它,然后如果它不在那里,则返回正在发出的请求。检查是否设置了正文解析器。如果两者都不适用,那么很可能是您的模型存在问题。可能是屏蔽了字段或类似项。错误在我的模型中。。无法解释这给我带来的挫折。感谢您的帮助。错误实际上在我的模型中,但您是正确的newUser.password是undefined@4cody那你当时为什么接受这个答案呢!显然,您的问题不包括在模型中显示错误的代码部分(可能是另一个名称),显然这并没有给出原因。你真的应该删除这个问题,或者至少更新并自我回答。在目前的情况下,接受一个并非真正解决方案的答案只是误导他人。他给出的答案是可以接受的。“但我明白你的意思,”他说。