我还没有找到在线解决此问题的方法。
我正在在线上课程,并使用MERN堆栈创建一个社交媒体网站。我遇到了一个问题,导致我无法将用户注册到此应用中。
文件很大,我将在下面显示一些相关代码
在邮递员中,我向适当的路由(localhost:5000 / api / users / register)发出POST请求,并需要所有适当的密钥(名称:Coop,电子邮件:something@email.com,密码:stoplookatmypassword,password2 :stoplookatmypassword)
我发送发帖请求时会收到此回复
{
"name": "Name field is required",
"email": "Email field is required"
}
我在此处的代码中添加了一些console.logs,以查看问题出在哪里,因为我拥有了所需的一切,并且电子邮件字段和名称字段也在那里。这是我路线的起点。
router.post('/register',(req,res) => {
console.log(req.body);
const {errors, isValid } = validateRegisterInput(req.body);
console.log(req.body);
//Check Validation
if(!isValid) {
return res.status(400).json(errors);
}
第一个console.log给我这个输出
{ 'name ': 'Coop',
email: 'something@email.com',
password: 'stoplookingatmypassword',
password2: 'stoplookingatmypassword' }
第二个console.log给我这个输出
{ 'name ': 'Coop',
email: 'something@email.com',
password: 'stoplookingatmypassword',
password2: 'stoplookingatmypassword',
name: '' }
显然,这是一个很大的问题,在查看了我的用户架构和验证功能后,我不知道为什么用引号引起来,这个问题使我无法继续工作,而且我无法在线找到任何解决方案。任何帮助都在这里,任何建议都会走很长一段路,谢谢您的时间。
问题:
'name ': 'Coop'
这是validateRegisterInput()函数供参考
const Validator = require('validator');
const isEmpty = require('./is-empty');
module.exports = function validateRegisterInput(data) {
let errors = {};
data.name = !isEmpty(data.name) ? data.name : '';
data.email = !isEmpty(data.email) ? data.email : '';
data.password = !isEmpty(data.password) ? data.password : '';
data.password2 = !isEmpty(data.password2) ? data.password2 : '';
if(!Validator.isLength(data.name, { min: 2, max: 30})) {
errors.name = 'Name must be between 2 and 30 characters';
}
if(Validator.isEmpty(data.name)) {
errors.name = 'Name field is required';
}
if(!Validator.isEmpty(data.email)) {
errors.email = 'Email field is required';
}
if(!Validator.isEmail(data.email)) {
errors.email = 'Email is invalid';
}
if(Validator.isEmpty(data.password)) {
errors.password = 'Password field is required';
}
if(!Validator.isLength(data.password, { min: 6, max: 30})) {
errors.password = 'Password must be at least 6 charachters';
}
if(Validator.isEmpty(data.password2)) {
errors.password2 = 'Confirm password field is required';
}
if(!Validator.equals(data.password, data.password2)) {
errors.password2 = 'Passwords must match';
}
return {
errors,
isValid: isEmpty(errors)
};
};
答案 0 :(得分:3)
请求正文中的第一个属性键用引号引起来,因为第一个属性是name
,在属性名的末尾带有空格。由于这是一个有效的属性名称,但不是一个有效的变量名称,因此它用引号将属性名称转义。