我正在将现有的 Hapi 16 应用程序移植到 Hapi 17 - 并且遇到了 Joi 验证问题...
<!-- language: lang-js -->
'use strict';
const Joi = require('joi');
const validator = Joi.object({
"sku": Joi.string().required(),
"name": Joi.string()
// cut for berevity..
)
})
module.exports = {
method: ["POST", "PUT"],
path: "/api/products",
options: {
validate: {
params: validator
},
async handler(request, h) {
try {
const updateOrCreateItemQuery = { sku: request.payload.sku };
const result = await request.postItem( "product", updateOrCreateItemQuery);
return result;
} catch (err) {
throw h.internal("Internal MongoDB error", err);
}
}
}
};
当我启动应用程序时(不是当我访问路线时),我收到以下错误:{ AssertionError [ERR_ASSERTION]: 无法在没有路径参数的情况下设置路径参数验证:POST/api/products
我已经把所有东西都剥离了 - 所以它只是这条路线。它肯定与 Joi 有关,因为当我删除验证时 - 它起作用了......我已经阅读了文档 - 并且看不出我做错了什么......
(我已将各种装饰器应用于请求对象 - 例如 postItem 等,其中...将项目发布到数据库)
最佳答案
<!-- language: lang-js -->
'use strict';
const Joi = require('joi');
const validator = {
"sku": Joi.string().required(),
"name": Joi.string()
// cut for berevity..
)
}
module.exports = {
method: ["POST", "PUT"],
path: "/api/products",
options: {
validate: {
payload: validator
},
async handler(request, h) {
try {
const updateOrCreateItemQuery = { sku: request.payload.sku };
const result = await request.postItem( "product", updateOrCreateItemQuery);
return result;
} catch (err) {
throw h.internal("Internal MongoDB error", err);
}
}
}
};
将验证转换为常规对象,并将验证选项设置为有效负载......这是有道理的,因为这是一个接受 POST 和 PUT 的路由。
关于node.js - hapi 17 与 joi 验证断言错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47757679/