Estoy creando una función que acepta una solicitud de publicación. La solicitud de publicación también contiene un objeto JSON convertido en una cadena. En el backend, necesito validar si esta cadena se puede analizar en JSON y solo luego continuar. Existe la función de enrutamiento:
var express = require('express'); var validate = require('express-validator'); var hotelController = require('../controllers/hotel-controller'); var hotelValidation = require('../validations/hotel-validation'); var router = express.Router(); router.route('/create') .post(validate(hotelValidation.createHotel), hotelController.create);
Aquí está el objeto de validación:
var Joi = require('joi'); module.exports = { createHotel: { body: { //NEED TO CHECK IF THE BELOW FIELD //CAN BE CONVERTED TO JSON FROM STRING data: Joi.string().required() } } };
Como se comentó en la pregunta, Joi.object()
seguirá funcionando con una cadena JSON
, Joi.array()
también funciona.
Genera un objeto de esquema que coincide con un tipo de datos de objeto (así como cadenas JSON que se analizan en objetos).
Por ejemplo, dado el esquema:
Joi.object().keys({ body: Joi.object().keys({ data: Joi.object(), array: Joi.array() }) })
Una carga útil válida puede ser:
{ body: { data: '{"json": true, "foo": "bar"}', array: '[1, 2, 3, "hello", 4, "world"]' } }
El ejemplo anterior se puede demostrar aquí , simplemente pegue el esquema y los datos del ejemplo.