我在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
无效。
答案 0 :(得分:1)
在对这个主题进行调查之后,您将无法以这种方式管理您的验证。
我建议您使用中间件来管理验证层。
config
对象中添加包含验证模式的验证密钥。但是您的验证模式将是一个字符串。这里是一个例子:
{
"method": "POST",
"path": "/articles",
"handler": "Article.create",
"config": {
"policies": [],
"validate":{
"body":{
"name": "string.required"
}
}
}
},
在此中间件中,您将能够使用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",
但这只是响应的一部分。