node.js - hapi 17 与 joi 验证断言错误

标签 node.js validation hapi.js joi

我正在将现有的 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/

相关文章:

javascript - 如何在javascript中计算数组内的数组元素?

node.js - 如何在 NodeJS 中使用 "Mac Terminal"和命令行 "console.log"显示 "Local heroku"中的多行?

干净地验证输入

c# - 如何区分在我的验证方法中编辑和创建新项目?

javascript - Hapijs 路由注册模式

javascript - date-fns 中的 parse 函数返回前一天的值

javascript - 为什么 JavaScript Promises 有时既不使用 .catch 也不使用 .then?

javascript - 正则表达式窗口路径验证器

javascript - NodeJS + Hapi + CSS 麻烦

javascript - 在 HapiJS Confidence 配置对象中设置过滤对象的默认值