Express v4 自定义 Joi 中间件未传递请求、响应、下一步
Express v4 custom Joi middleware not passing Request, Response, Next
我正在尝试创建一个自定义中间件函数来与 Joi 一起使用,我将把它放在我的路由上,我可以传递一个 Joi 模式来验证。
我以前制作过用于检查 JWT 的中间件,但是它们没有传递参数,而且很好。
设置路由并传递中间件函数
app.route('/identity').post([validator(identitySchema)], this.identityController.createIdentity);
验证器中间件函数
export const validator = (schema: object) => {
return async (req: Request, res: Response, next: NextFunction): Promise<void> => {
console.log('req: ' + req.body); //outputs req: [object Object]
console.log('schema: ' + schema); //outputs schema: [object Object]
//DO VALIDATION HERE
};
};
如果我刚刚完成
app.route('/identity').post([validator], this.identityController.createIdentity);
export const validator(req: Request, res: Response, next: NextFunction) => {
它会获取请求、资源等...
这是我的中间件 Joi 验证器
在我的路线上
import express from 'express'
import checkJoi from '../middlewares/check-joi'
import Joi from '@hapi/joi'
const router = new express.Router()
const schemaIndex = Joi.object({
addressId: Joi.number().required(),
products: Joi.array().items(
Joi.object().keys({
id: Joi.number().required(),
quantity: Joi.number().required()
})
).required()
})
router.post('/', checkJoi(schemaIndex), myController.requestUser)
export default router
中间件 Joi 验证器
export default (schema) => {
return (req, res, next) => {
const { error } = schema.validate(req.body)
const valid = error == null
if (valid) {
next()
} else {
const { details } = error
const errorsDetail = details.map(i => i.message)
res.status(422).json({
status: false,
error: errorsDetail
})
}
}
}
希望对你有所帮助
我正在尝试创建一个自定义中间件函数来与 Joi 一起使用,我将把它放在我的路由上,我可以传递一个 Joi 模式来验证。
我以前制作过用于检查 JWT 的中间件,但是它们没有传递参数,而且很好。
设置路由并传递中间件函数
app.route('/identity').post([validator(identitySchema)], this.identityController.createIdentity);
验证器中间件函数
export const validator = (schema: object) => {
return async (req: Request, res: Response, next: NextFunction): Promise<void> => {
console.log('req: ' + req.body); //outputs req: [object Object]
console.log('schema: ' + schema); //outputs schema: [object Object]
//DO VALIDATION HERE
};
};
如果我刚刚完成
app.route('/identity').post([validator], this.identityController.createIdentity);
export const validator(req: Request, res: Response, next: NextFunction) => {
它会获取请求、资源等...
这是我的中间件 Joi 验证器
在我的路线上
import express from 'express'
import checkJoi from '../middlewares/check-joi'
import Joi from '@hapi/joi'
const router = new express.Router()
const schemaIndex = Joi.object({
addressId: Joi.number().required(),
products: Joi.array().items(
Joi.object().keys({
id: Joi.number().required(),
quantity: Joi.number().required()
})
).required()
})
router.post('/', checkJoi(schemaIndex), myController.requestUser)
export default router
中间件 Joi 验证器
export default (schema) => {
return (req, res, next) => {
const { error } = schema.validate(req.body)
const valid = error == null
if (valid) {
next()
} else {
const { details } = error
const errorsDetail = details.map(i => i.message)
res.status(422).json({
status: false,
error: errorsDetail
})
}
}
}
希望对你有所帮助