hapi 17 与 joi 验证 AssertionError
hapi 17 with joi validation AssertionError
我正在将现有的 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]: Cannot set path parameters validations without path parameters: 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.
的路由
我正在将现有的 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]: Cannot set path parameters validations without path parameters: 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.
的路由