我经常使用 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
无法工作。
最佳答案
好吧,在研究了这个主题之后,您将无法以这种方式管理您的验证。
我建议您使用中间件来管理验证层。
- 使用 JSON 格式的路由文件(如默认格式)
然后在
config
对象中添加包含验证架构的验证 key 。但是您验证的 skema 将是一个字符串。
这是一个例子:
{
"method": "POST",
"path": "/articles",
"handler": "Article.create",
"config": {
"policies": [],
"validate":{
"body":{
"name": "string.required"
}
}
}
},
- 那么您必须遵循 Middleware documentation 📚创建您的验证中间件。
在此中间件中,您将能够使用 ctx.request.url
和 strapi.config 中的
您将能够找到您的验证配置。.find()
获取请求的 URL。路线
然后,您将必须使用您设置的 JSON 验证配置并在请求正文上重新编写 Joi 验证 - ctx.request.body
关于joi - 如何将 joi 验证器与 Strapi.js 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57798692/