簡體   English   中英

Joi自定義驗證

[英]Joi custom validation

我正在使用Joi驗證來自用戶的一些數據。 我將其與這樣的模塊一起使用:

const Joi = require('joi')

// User validation rules
module.exports = {
  create: {
    body: {
      email: Joi.string().email().required(),
      password: Joi.string().min(6).max(128).required(),
      name: Joi.string().max(128).required()
    }
  },
  update: {
    body: {
      password: Joi.string().min(6).max(128).required(),
      name: Joi.string().max(128).required()
    }
  }
}

然后在路由器中將其作為中間件傳遞:

router.post('/register', validator(create), userController.register)

對於更新,我想使用以下代碼創建自定義驗證器:

const json = { 
  "email":"aa@aa.pl",
  "password":"someNewPass",
  "name":"John Smith",
  "activationKey":"123123",
  "active":false,
  "resetPasswordKey":"123123"
}

const forbiddenFields = ["email", "activationKey", "active", "resetPasswordKey"];

const validate = (json, forbidden) => {
  for(let i = 0; i < forbidden.length; i++) {
    if(json.hasOwnProperty(forbidden[i])) {
      return false;
    }
  }
  return true;
}

const isValid = validate(json, forbiddenFields)
console.log('is json valid? ', isValid)

在Joi API中發現了extend方法,但是示例如此混亂,以至於我無法使用我的代碼創建自定義驗證。

您可能要使用禁止的鑰匙。

 const input = { email: 'example@example.com', activationKey: 123 }; const schema = { email: Joi.string().email(), activationKey: Joi.any().forbidden() }; const result = Joi.validate(input, schema); if (result.error) { console.log(result.error.details) } 
 <script src="https://cdn.jsdelivr.net/npm/joi-browser@13.4.0/dist/joi-browser.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM