hapi 17 с проверкой Joi 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 и т. Д., Который ... отправляет элемент в БД)


person Rob    schedule 11.12.2017    source источник
comment
Один приятель сказал, что мне не нужен объект Joi - я должен передать схему проверки как простой старый объект. Я в поезде в пн ... буду тестировать когда дома :)   -  person Rob    schedule 11.12.2017


Ответы (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);
      }
    }
  }
};

Превратили проверку в обычный объект и установили для параметра проверки значение полезной нагрузки .... что имеет смысл, поскольку этот маршрут принимает POST и PUT.

person Rob    schedule 11.12.2017