node.js - 如何解决 Express Validator 中间件错误?
问题描述
首先,我有这样的用户控制器:
文件 userController.js
const { validationResults } = require('express-validator');
const { userSignUpValidation } = require('../validator/userSignUpValidate');
function userCreation(req, res) {
try{
const errors = validationResults(req);
if(errors) {
return res.status(400)
.json({
error: {
message: errors.array()[0].msg
}
})
}
bcrypt.hash(req.body.userPassword, saltRounds, function(err, hash) {
User.create({
userId: req.body.userId,
userEmail: req.body.userEmail,
userPhoneNumber: req.body.userPhoneNumber,
userPassword: hash
})
.then((user) => {
return res.status(200).json(user);
})
.catch((error) => {
return res.status(400).json.error;
});
});
} catch(error) {
return res.status(400)
.json({
error: {
message: error
}
})
}
}
在验证器/userSignUpValidate.js中,代码如下:
'use strict'
const { check } = require('express-validator');
module.exports = [
check('userId').isLength({ min: 5 }).withMessage('The username at least more than 5 characters!'),
check('userPassword').isLength({ min: 6 }).withMessage('The password at least more than 6 characters!'),
check('userPhoneNumber').isLength({ min: 10 }).withMessage('The phone number at least more than 10 characters!'),
check('userEmail').isEmail().withMessage('Is your email correct? Please be correct!')
]
当我在邮递员上测试它时,json 响应总是catch
在 userController.js 上显示错误而没有错误消息。
{
"error": {
"message": {}
}
}
我的问题。为了确保 express-validator 在正确的位置运行,我应该把代码放在哪里?
解决方案
首先,您需要在您要导入的代码中导入validationResult
from 。express-validator
validationResults
其次,您没有使用userSignUpValidate
中间件。该中间件可以在控制器中使用,但最好在 userRoute 中应用它以保持控制器清洁。
因此,让我们将userSignUpValidate
中间件应用于 userRoutes。如果文件路径与您的不匹配,请修复它们。
const express = require("express");
const router = express.Router();
const usersController = require("../controllers/userController");
const userSignUpValidate = require("../validator/userSignUpValidate");
router.post("/register", [userSignUpValidate], usersController.userCreation);
module.exports = router;
然后在控制器中,我们需要导入并validationResult
使用express-validator
它:
const { validationResult } = require("express-validator");
function userCreation(req, res) {
try {
const errors = validationResult(req);
if(!errors.isEmpty()) {
console.log(errors);
return res.status(400).json({
error: {
message: errors.array()[0].msg
}
});
}
//other code you have
} catch (error) {
return res.status(400).json({
error: {
message: error
}
});
}
}
exports.userCreation = userCreation;
当我们发送带有 3 个字符密码的请求正文时,如下所示:
{
"userId": "userid",
"userPassword": "123",
"userPhoneNumber": "1234567890",
"userEmail": "abc@gmail.com"
}
响应将是这样的,带有 400 - Bad Request:
{
"error": {
"message": "The password at least more than 6 characters!"
}
}
推荐阅读
- xpath - 如何使用量角器 xpath 函数仅从父元素(不包括子元素)获取文本?
- javascript - Javascript 调整缓冲图像的大小以提高 tesseract OCR 的准确性
- android - 与查询参数的深度链接在 Android 中不起作用
- vb.net - 为什么从接口值设置对象仅在一行 if 语句中抛出 invalidCastException
- r - R中向量中的意外符号
- javascript - 如何在 vue.js 单元测试中模拟 window.google
- arduino-uno - 使用arduino将传感器数据从dragino lora发射器发送到dragino lora接收器
- r - 规范化数据帧 - 错误:二进制的非数字参数 - R
- html - SVG 图像未显示(尝试了很多方法)
- assembly - Bochs GDT 段限制以十六进制左移 3 次并添加 0xFFF。这是正常的吗?