【问题标题】:How to use joi validator with strapi.js?如何将 joi 验证器与strapi.js 一起使用?
【发布时间】:2019-09-19 20:35:33
【问题描述】:

我在 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 不工作。

【问题讨论】:

    标签: joi strapi


    【解决方案1】:

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

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

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

    这是一个例子:

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

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

    然后您将不得不使用您设置的 JSON 验证配置并在您的请求正文上重新组合 Joi 验证 - ctx.request.body

    【讨论】:

    • 感谢您的再次回复。我会试着调查一下。
    【解决方案2】:

    对于routes.json文件,你可以将它重命名为routes.js并添加一个module.exports,你的json文件就变成了一个js文件。

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

    -

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

    但这只是响应的一部分。

    【讨论】:

    • 好吧,让我试试这个方法。
    • 如你所说,我设置了js 而不是json。现在我可以使用joi。但现在问题是 joi 不起作用。我已将name 设置为必需项,当我从邮递员调用 API 时,它没有从 joi 中得到错误。你能告诉我为什么它不起作用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多