如何在trapi.js中使用Joi验证器?

时间:2019-09-05 05:02:01

标签: joi strapi

我在joi上使用node的express做了很多工作,而在Hapi.js上做了很少的工作。现在,我正在探索Strapi.js。现在,我已标记为创建Content Type builder时会得到基本的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无效。

2 个答案:

答案 0 :(得分:1)

在对这个主题进行调查之后,您将无法以这种方式管理您的验证。

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

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

这里是一个例子:

{
  "method": "POST",
  "path": "/articles",
  "handler": "Article.create",
  "config": {
    "policies": [],
    "validate":{
      "body":{
         "name": "string.required"
       }
    }
  }
},
  1. 然后,您将必须遵循Middleware documentation ?来创建验证中间件。

在此中间件中,您将能够使用ctx.request.url获取请求的URL,并在.find()中使用strapi.config.routes来查找验证配置。

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

答案 1 :(得分:0)

对于routes.json文件,您可以将其重命名为routes.js并添加 module.exports ,您的json文件将成为js文件。

{
  "routes": [
    {
      "method": "GET",
      ...

-

module.exports = {
  "routes": [
    {
      "method": "GET",

但这只是响应的一部分。