Node js joi 验证未按预期工作

问题描述

我已经为我的项目实施了 joi 验证,但它不适用于任何单个领域。无论您通过什么,它都会存储在数据库中,即使我做了验证代码,它也不会验证任何字段 这是验证代码

import * as Joi from "joi";
import { Request,Response,NextFunction } from 'express';
import { StatusCodes } from 'http-status-codes';
import { sendError } from "../responseHelper";
import { validationoptions } from "./_index";

export class CountryValidator {

    public async createCountryValidator(req: Request,res: Response,next: NextFunction) {

        try {
            const schema = Joi.object({
                id: Joi.number().required(),name: Joi.string().required(),code: Joi.string().required(),status: Joi.number().valid(0,1).required(),});
            schema.validate(req.body,validationoptions);
            next();
        } catch (error) {
            sendError(res,error,error.code,StatusCodes.INTERNAL_SERVER_ERROR);
        }
    }
}

这是我的路线

adminRoute.route('/country/create')
    .post(countryValidator.createCountryValidator,countryController.createCountry);

在这条路径上,我在下面发布的数据根据​​验证是完全错误的,但它仍然接受所有数据并且不抛出任何验证错误

{
    "name":"BR1Z","code":100,"status":"1"
}

有人能帮我解决这个问题吗?

解决方法

schema.validate 返回带有 error 的对象(而不是抛出错误)。

...
    const joiRes = schema.validate(req.body,validationOptions);
    if(joiRes.error){
        sendError(res,error,error.code,StatusCodes.INTERNAL_SERVER_ERROR);
    }
...

见:https://joi.dev/api/?v=17.4.1