>

Joi 를 사용하여 Node.js RESTapi에서 사용자 입력의 유효성을 검사하는 것이 매우 간단합니다. .

그러나 문제는 내 앱이 영어로 작성되지 않았다는 것입니다. 즉, 프런트 엔드 사용자에게 사용자 지정 작성 메시지를 보내야합니다.

이 문제에 대해 Google에서 검색했으며 문제 만 발견했습니다.

어쩌면 누군가가 이것에 대한 해결책을 줄 수 있습니까?

이 코드는 Joi 로 유효성을 검사하는 데 사용하는 코드입니다.  시스템 :

   var schema = Joi.object().keys({
      firstName: Joi.string().min(5).max(10).required(),
      lastName: Joi.string().min(5).max(10).required()
      ..
    });
    Joi.validate(req.body, schema, function(err, value) {
      if (err) {
        return catched(err.details); 
      }
    });
    function catched(reject) {
      res.json({
        validData: false,
        errors: reject
      });
    }

플러스, Joi 를 사용하는 방법이 있습니까  고객 쪽?

감사합니다!


  • 답변 # 1

    Joi 버전 14.0.0

    const SchemaValidation = {
        coins: Joi.number()
                  .required()
                  .error(errors => {
                    return {
                      message: "Coins is required."
                    };
                  }),
                challenge_name: Joi.string()
                  .required()
                  .error(errors => {
                    return {
                      message: "Challenge name is required."
                    };
                  }),
                challengeType: Joi.string()
                  .required()
                  .error(errors => {
                    return {
                      message: "Challenge type is required."
                    };
                  }),
                challengeDescription: Joi.string()
                  .required()
                  .error(errors => {
                    return {
                      message: "Challenge description is required."
                    };
                  })
      };
    
    

    오류개체에서 오류 유형에 따라 메시지를 받고 변경할 수 있습니다.

  • 답변 # 2

    다른 유형의 오류가있는 경우 Ashish Kadam의 답변으로 확장 중 오류 유형이 있으며 이에 따라 메시지를 설정하십시오.

    var schema = Joi.object().keys({
      firstName: Joi.string().min(5).max(10).required().error(errors => {
        errors.forEach(err => {
          switch (err.type) {
            case "any.empty":
              err.message = "Value should not be empty!";
              break;
            case "string.min":
              err.message = `Value should have at least ${err.context.limit} characters!`;
              break;
            case "string.max":
              err.message = `Value should have at most ${err.context.limit} characters!`;
              break;
            default:
              break;
          }
        });
        return errors;
      }),
      // ...
    });
    
    

    여기에서 오류 목록을 확인할 수 있습니다. Joi 14.3.1 API 참조>오류>오류 목록

    또한 any.error 를 확인할 수 있습니다  자세한 내용은 참조하십시오. 문서 인용 :

    와이즈 비즈 와이즈 비즈  될 수 있습니다 :         

    와이즈 비즈의 사례  -재정의 오류.

      

    와이즈 비즈 오류 배열을 인수로 사용하여 다음 중 하나를 수행해야합니다.         

    Overrides the default joi error with a custom error if the rule fails where:

      를 반환  -오류 메시지를이 텍스트로 바꿉니다.

        

      단일 err 를 반환  또는 Error  그것의 어디에 :         

      function(errors)  -오류 유형을 제공하는 선택적 매개 변수 (예 : string ).

        

      object  - Array 인 경우 선택적 매개 변수  오류 텍스트가 포함되어 있습니다.

        

      type  - number.min 인 경우 선택적 매개 변수  는 일반적인 joi 언어 오류와 동일한 형식을 사용하여 템플릿 문자열을 포함하여 제공됩니다.

        

      message  - template 를 사용하는 경우 오류에 대한 컨텍스트를 제공하기위한 선택적 매개 변수 .

        

        

      와이즈 비즈 반환  -당신이 직접 template 를 제공 할 때와 동일 하지만 오류에 따라 오류 메시지를 맞춤 설정할 수 있습니다.

        

        

        

      message :         

      context  -오류 처리기를 모든 오류에 사용해야하는지 또는이 속성에서 발생하는 오류에만 사용해야하는 부울 값 ( template  값). 이 개념은 오직 Error 에 대해서만 의미가 있습니다.  또는 Error  다른 값과 같은 스키마에는 자식이 없습니다. 기본적으로 options .

        

        

  • 답변 # 3

    내가 찾은 해결책은 다음을 설정하는 것입니다 :

    self
    
    
    그런 다음 true 를 인쇄하십시오.  콜백 array 에서  변수

  • 답변 # 4

    .error (new Error ( 'message'))를 사용할 수 있습니다.

    object
    
    

  • 답변 # 5

    false

    문서 링크

    var schema = Joi.object().keys({ firstName: Joi.string().min(5).max(10).required().label("Your error message in here"), lastName: Joi.string().min(5).max(10).required() .. });

관련 자료

  • 이전 php - Json_encode가 빈 배열을 반환하는 이유는 무엇입니까?
  • 다음 sql - like 연산자를 사용하여 숫자 범위를 가져 오는 방법