如何使用joi设置适当的架构和验证?

问题描述

我目前正在尝试使用joi软件包设置验证,但是我遇到了一些很可能与语法有关的问题。

我建立的模式是一个相当简单的模式,它检查数字是否有效和/或数据库中是否存在ID。

export default router.post('/',async function(req,res,next) {
  const Joi = require('joi');
  // for testing
  if (!Object.keys(req.body).length) {
    req.body = {'tId':'123456789'}
  }

  const data = req.body;

  const schema = Joi.object().keys({
    tId: Joi.string.tId.required()
  });

  Joi.validate(data,schema,(err,value) => {

    if(err){
      res.status(404).json({
        status: 'error',message: 'tId not found',data: data
      });
    } else {
      res.json({
        status: 'success',message: 'Person found',data: Object.assign(22,value)
      });
    }
  });
})

我目前遇到的错误tId: Joi.string.tId.required()

UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性required

我目前的研究主要围绕以下链接

https://www.digitalocean.com/community/tutorials/how-to-use-joi-for-node-api-schema-validation

我试图模仿本教程中实现的概念,我认为我对它的工作原理有些了解,但是我在使用库语法时遇到了一些麻烦。

充分利用joi库的任何链接,视频,项目等都将非常有帮助。

解决方法

您猜到了,这只是语法错误。更新此部分:

const schema = Joi.object().keys({
    tId: Joi.string().required()
});

Joi.validate开始,我假设您是Joi v15或更低版本,以下是您正在寻找的文档- https://joi.dev/api/?v=15.1.1#string---inherits-from-any