javascript - 我在 Postman 中发送 'name',ValidatorExpress 返回 'name' 尚未提供

标签 javascript node.js express mongoose

在 Postman 中,我使用“POST”方法和 url:http://localhost:7777/register,我还选择Bodyrow 并粘贴对象{name: 'Martin}。为什么在 ["您必须提供姓名!","该电子邮件无效!","密码不能为空!","确认的密码不能为 空白“,”哎呀!您的密码不匹配“]返回我您必须提供一个名字!”因为我在正文中给出了我的名字?此外,它还获取状态:500Internal Server Error

路由:index.js

const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');

router.get('/register', userController.registerForm);

router.post('/register',
  userController.validateRegister,
  userController.register
);

module.exports = router;

模型:User.js

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    const validator = require('validator');
    const passportLocalMongoose = require('passport-local-mongoose');
    const mongodbErrorHandler = require('mongoose-mongodb-errors');


    const userSchema = new Schema ({
        name: {
            type: String,
            trim: true,
            required: 'Please supply a name'
        },
        email: {
            type: String,
            unique: true,
            lowercase: true,
            trim: true,
            validate: [validator.isEmail, 'Invalid Email address'],
            required: 'Please supply an email address'
        }
    })

    userSchema.plugin(passportLocalMongoose, {usernameField: 'email'});
    userSchema.plugin(mongodbErrorHandler);

    module.exports = mongoose.model('User', userSchema);

Controller :userController.js

const mongoose = require('mongoose');
const User = mongoose.model('User');
const {promisify} = require("es6-promisify");

exports.registerForm = (req, res) => {
    res.json('res');
  };

  exports.validateRegister = (req, res, next) => {
    req.sanitizeBody('name');
    req.checkBody('name', 'You must supply a name!').notEmpty();
    req.checkBody('email', 'That Email is not valid!').isEmail();
    req.sanitizeBody('email').normalizeEmail({
      remove_dots: false,
      remove_extension: false,
      gmail_remove_subaddress: false
    });
    req.checkBody('password', 'Password Cannot be Blank!').notEmpty();
    req.checkBody('password-confirm', 'Confirmed Password cannot be blank!').notEmpty();
    req.checkBody('password-confirm', 'Oops! Your passwords do not match').equals(req.body.password);

    const errors = req.validationErrors();
    if (errors) {
      res.send('error', errors.map(err => err.msg));
      return; // stop the fn from running
    }
    next(); // there were no errors!
  };

  exports.register = async (req, res, next) => {
    const user = new User({ email: req.body.email, name: req.body.name });
    const register = promisify(User.register, User);
    await register(user, req.body.password);
    next(); // pass to authController.login
  };
}

最佳答案

您可能没有安装正确的正文解析器。例如,如果您想处理 JSON,请将其添加到您的 Express 应用程序设置中:

const bodyParser = require('body-parser');
const express = require('express');

const app = express();

// ...

app.use(bodyParser.json());

如果没有主体解析器,req.body 将不会按照您的预期进行填充。

您还需要确保将 Content-Type header 设置为 application/json,以便您的服务器知道正文包含 JSON。

关于javascript - 我在 Postman 中发送 'name',ValidatorExpress 返回 'name' 尚未提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59293483/

相关文章:

javascript - 按 Enter 键时的动态文本框

javascript - 使用 JQuery 将输入增加 1 限制为 9 并连接到隐藏输入

javascript - 异步 foreach 中的设置值始终返回 null

javascript - 管理员登录后如何访问网站的其他页面

node.js - 如何使 Mongoose 连接在全局范围内可用

javascript - 当路由参数为某个值时如何添加自定义路由来表达

javascript - 在不制作副本的情况下替换 react redux reducer 中的新状态

javascript - 如何创建超过 100 张面孔的 facebook likebox?

node.js - Node webpack 开发服务器在 vuejs 项目中失败 'Cannot GET/'

javascript - Mongoose 切换多个连接