NodeJS第一个res.body对象用引号引起来

时间:2018-07-18 19:07:49

标签: javascript node.js mongodb express

我还没有找到在线解决此问题的方法。

我正在在线上课程,并使用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)
    };
};

1 个答案:

答案 0 :(得分:3)

请求正文中的第一个属性键用引号引起来,因为第一个属性是name,在属性名的末尾带有空格。由于这是一个有效的属性名称,但不是一个有效的变量名称,因此它用引号将属性名称转义。