【问题标题】:hapi 17 with joi validation AssertionErrorhapi 17 与 joi 验证 AssertionError
【发布时间】:2018-05-25 06:09:31
【问题描述】:

我正在将现有的 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 等,它...将项目发布到数据库)

【问题讨论】:

  • 一个朋友告诉我我不需要 Joi 对象 - 我应该将验证模式作为一个普通的旧对象传递。我在火车上...回家后会测试:)

标签: node.js validation hapijs joi


【解决方案1】:
<!-- 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);
      }
    }
  }
};

将 validate 转换为常规对象,并将 validate 选项设置为 payload.... 这是有道理的,因为 this 路由接受 POST 和 PUT。

【讨论】:

    猜你喜欢
    • 2018-09-24
    • 2013-10-19
    • 2019-10-10
    • 2020-05-30
    • 2018-07-25
    • 1970-01-01
    • 2018-06-25
    • 2015-04-29
    • 2015-07-01
    相关资源
    最近更新 更多