Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么服务器会这样说;名称“;发布身份验证信息时是否需要?_Javascript_Mongodb_Authentication_Mongoose_Schema - Fatal编程技术网

Javascript 为什么服务器会这样说;名称“;发布身份验证信息时是否需要?

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,

我正在尝试使用jwt设置非常基本的auth。我可以在postman中直接将信息上传到mongodb集群,但我在前端尝试同样的事情时遇到了困难

当我在本地主机上转到“/注册”时,输入信息并按submit,它会以
需要“名称”

我感到困惑,因为我认为我已经在输入文本框中提交了名称。这是我的模式:

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)有帮助吗?