Javascript 为什么服务器会这样说;名称“;发布身份验证信息时是否需要?
我正在尝试使用jwt设置非常基本的auth。我可以在postman中直接将信息上传到mongodb集群,但我在前端尝试同样的事情时遇到了困难 当我在本地主机上转到“/注册”时,输入信息并按submit,它会以Javascript 为什么服务器会这样说;名称“;发布身份验证信息时是否需要?,javascript,mongodb,authentication,mongoose,schema,Javascript,Mongodb,Authentication,Mongoose,Schema,我正在尝试使用jwt设置非常基本的auth。我可以在postman中直接将信息上传到mongodb集群,但我在前端尝试同样的事情时遇到了困难 当我在本地主机上转到“/注册”时,输入信息并按submit,它会以 需要“名称” 我感到困惑,因为我认为我已经在输入文本框中提交了名称。这是我的模式: const mongoose=require(“mongoose”); const userSchema=new mongoose.Schema({ 姓名:{ 类型:字符串, 要求:正确, 最高:300,
需要“名称”
我感到困惑,因为我认为我已经在输入文本框中提交了名称。这是我的模式:
const mongoose=require(“mongoose”);
const userSchema=new mongoose.Schema({
姓名:{
类型:字符串,
要求:正确,
最高:300,
最小:6
},
电邮:{
类型:字符串,
要求:正确,
最高:255,
最小:6
},
密码:{
类型:字符串,
要求:正确,
最高:1024,
最小:6
},
日期:{
类型:日期,
默认值:Date.now
}
});
module.exports=mongoose.model('User',userSchema);
下面是我的index.js中的发布过程
app.post('/register',异步(req,res)=>{
//验证
const{error}=registerValidation(请求主体);
if(error)返回res.status(400).send(error.details[0].message);
//如果用户已在数据库中
const emailExist=wait User.findOne({email:req.body.email});
如果(emailExist)返回res.status(400).send(电子邮件已存在);
//产盐
常量盐=等待B晶型盐(10);
const hashPassword=wait bcrypt.hash(req.body.password,salt);
//创建用户
const u=新用户({
名称:req.body.name,
电子邮件:req.body.email,
密码:hashPassword
});
试一试{
const savedUser=等待u.save();
res.send(savedUser);
//如果只想发送id:
//res.send({user:user.\u id});
}捕捉(错误){
资源状态(400)。发送(错误);
}
});
//登录:
app.post('/login',async(req,res)=>{
//验证
const{error}=loginValidation(请求主体);
if(error)返回res.status(400).send(error.details[0].message);
//如果用户已在数据库中
const u=wait User.findOne({email:req.body.email});
如果(!u)返回res.status(400)。发送(“电子邮件错误”);
//密码检查
const user_password=u.password;
const password_history=req.body.password;
如果(用户密码!=密码历史记录)返回res.status(400).send(“密码错误”);
//JWT
const-token=jwt.sign({u-id:u.\u-id},process.env.token\u-SECRET);
res.header('token',token.).send(token);
});
最后是注册表表,register.ejs
寄存器
名称
电子邮件
密码
登记
我不明白为什么服务器会声明需要“name”
。我的理解是,submit按钮将“/register”发布到app.post()
,然后根据模式请求名称、电子邮件和密码。我认为,name:req.body.name
是作为注册用户时使用的名称输入的名称。有人能解释一下为什么我错了吗
为了了解更多的上下文,我把整个项目放在了plunkr上:我找到了答案。问题是我提交的是json数据,而不是表单数据。我解决这个问题的方法是导入body parser
,删除行app.use(express.json())代码>,并将其替换为app.use(bodyParser.urlencoded({extended:false}))
。我检查了我的mongo集群,发现用户已注册到数据库中。我找到了答案。问题是我提交的是json数据,而不是表单数据。我解决这个问题的方法是导入body parser
,删除行app.use(express.json())代码>,并将其替换为app.use(bodyParser.urlencoded({extended:false}))
。我检查了我的mongo集群,发现用户已注册到数据库中。请控制台。日志(req)有帮助吗?请控制台。日志(req)有帮助吗?