Javascript NodeJS第一个res.body对象在引用中
我还没有在网上找到解决这个问题的方法 我正在学习一门在线课程,并使用MERN stack创建一个社交媒体网站。我遇到了一个问题,无法将用户注册到此应用程序 这些文件很大,我将在下面展示一些相关代码 在Postman中,我向适当的路由(localhost:5000/api/users/register)发出POST请求,并使用所需的所有适当密钥(名称:Coop,电子邮件:something@email.com,密码:stoplookingatmypassword,密码2:stoplookingatmypassword) 当我发送post请求时,我得到了以下响应Javascript NodeJS第一个res.body对象在引用中,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我还没有在网上找到解决这个问题的方法 我正在学习一门在线课程,并使用MERN stack创建一个社交媒体网站。我遇到了一个问题,无法将用户注册到此应用程序 这些文件很大,我将在下面展示一些相关代码 在Postman中,我向适当的路由(localhost:5000/api/users/register)发出POST请求,并使用所需的所有适当密钥(名称:Coop,电子邮件:something@email.com,密码:stoplookingatmypassword,密码2:stoplookingat
{
"name": "Name field is required",
"email": "Email field is required"
}
我在这里的代码中添加了一些console.logs来查看问题所在,因为我有我需要的所有东西,email字段和name字段都在那里。下面是我路线的开始
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)
};
};
请求正文中的第一个属性键是引号,因为第一个属性是
name
,在属性名称的末尾有一个尾随空格字符。因为这是一个有效的属性名,但不是有效的变量名,所以它会用引号转义属性名 我的上帝从来没有注意到这一点,谢谢你分享这些知识。我必须通过测试才能相信哈哈哈。哇,我只是浪费了一个半小时的时间在地狱里,然后回到我的代码中,才明白这一点。非常感谢你的帮助,这对我来说意义重大。