Express v4 пользовательское промежуточное ПО Joi не передает запрос, ответ, следующий - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь создать пользовательскую функцию промежуточного программного обеспечения для использования с 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
  };
};

Если I только что сделал

app.route('/identity').post([validator], this.identityController.createIdentity);

export const validator(req: Request, res: Response, next: NextFunction) => {

Он бы взял запрос, разрешение и т. д. c ...

1 Ответ

0 голосов
/ 05 февраля 2020

Это мое промежуточное ПО Joi Validator

На моем маршруте

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

Middleware Joi Validator

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
      })
    }
  }
}

Надеюсь, я вам помог

...