1

我正在创建一个接受发布请求的函数。发布请求还包含一个转换为字符串的 JSON 对象。在后端,我需要验证此字符串是否确实可以解析为 JSON,然后才能继续。有路由功能:

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);

这是验证对象:

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()
        }
    }
};
4

1 回答 1

1

正如对该问题的评论,Joi.object()仍然可以使用JSON字符串,Joi.array()也可以使用。

它记录在 API 中

生成与对象数据类型(以及解析为对象的 JSON 字符串)匹配的模式对象。

例如,给定架构:

Joi.object().keys({
  body: Joi.object().keys({
    data: Joi.object(),
    array: Joi.array()
  })
})

有效载荷可以是:

{
  body: {
    data: '{"json": true, "foo": "bar"}',
    array: '[1, 2, 3, "hello", 4, "world"]'
  }
}

上面的例子可以在这里演示,只需将模式和示例数据粘贴进去。

于 2017-04-23T19:53:07.453 回答