joi - 如何将 joi 验证器与 Strapi.js 一起使用?

标签 joi strapi

我经常使用 joi 和 Node's Express 进行工作,而很少使用 Hapi.js。现在我正在探索 Strapi.js。现在我已经标记,当我创建一个内容类型构建器时,它会为我提供基本的 CRUD API。现在我想使用 joi 验证所有请求。由于 strapi 在 JSON 文件中生成所有路由。那么我该如何使用 joi 呢?我进行了很多搜索,但没有得到任何解决方案。

我找到了一个这样的解决方案。

{
  "method": "POST",
  "path": "/users",
  "handler": "users.create",
  "validate":{               <---------------- Hear I  can validate my req
      body:{
          fname: Joi.string().required()
      }
  },            
  "config": {
    "policies": []
  }
}

听说问题是他们使用了 Joi 但我必须定义它的包名称,但听说我有一个 JSON 文件,所以我无法这样做。

有没有人能解决这个问题?

更新

我已将该文件重命名为 router.json

const router = require('koa-joi-router');
const Joi = router.Joi;
module.exports = {
   "routes": [
      {
           "method": "POST",
           "path": "/tests",
           "validate":{
              "body":{
                 "name":Joi.string().required()
               }
            },
            "handler": "Test.create",
             "config": {
                "policies": []
              }
        },
   ]
}

仍然 Joi 无法工作。

最佳答案

好吧,在研究了这个主题之后,您将无法以这种方式管理您的验证。

我建议您使用中间件来管理验证层。

  1. 使用 JSON 格式的路由文件(如默认格式) 然后在 config 对象中添加包含验证架构的验证 key 。但是您验证的 skema 将是一个字符串。

这是一个例子:

{
  "method": "POST",
  "path": "/articles",
  "handler": "Article.create",
  "config": {
    "policies": [],
    "validate":{
      "body":{
         "name": "string.required"
       }
    }
  }
},
  • 那么您必须遵循 Middleware documentation 📚创建您的验证中间件。
  • 在此中间件中,您将能够使用 ctx.request.urlstrapi.config 中的 .find() 获取请求的 URL。路线您将能够找到您的验证配置。

    然后,您将必须使用您设置的 JSON 验证配置并在请求正文上重新编写 Joi 验证 - ctx.request.body

    关于joi - 如何将 joi 验证器与 Strapi.js 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57798692/

    相关文章:

    joi - 使用 joi 检查输入变量是字符串还是数组

    node.js - Joi - 根据其他键上的值需要

    Strapi 开发模式问题

    javascript - 错误 : Must use import to load ES Module: D:\node_modules\react-markdown\index. 不支持 ES 模块的 js require()

    strapi - 使用快速启动应用程序从用户界面在 Strapi 中注册新用户?

    node.js - 如何通过 Joi.validate 验证数据库中的唯一性?

    javascript - Joi 验证 : Capture the value passed in Custom Error Message

    javascript - 如何验证 Joi 中的引用总和

    angular - 如何在 Strapi、GraphQL 的 where 子句中使用多个 'and' 条件进行查询?

    javascript - 如何在strapi中为mongodb实现自增?