在 Postman 中,我使用“POST”方法和 url:http://localhost:7777/register
,我还选择Body
和 row
并粘贴对象{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/