joiのerrorsのtypeとcodeがある問題

2020/11/06に公開

結論

joi v15 → joi v16
のアップデートでerr.typeがerr.codeに変わってるなど大きな変更がある

v15
https://github.com/sideway/joi/blob/v15-commercial/lib/errors.js

v16
https://github.com/sideway/joi/blob/v16-commercial/lib/errors.js

どんな時に悩んだか

joiでエラー文言をカスタムするswitch文を書いていましたが、typeとcodeの2通りがあることに気づきどうして違うのかを調べて見ました。

下記は拝借してきたコードですが、ここでは古いtypeで書かれていて困惑したりします。

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;
  }),
  // ...
});

Discussion