如何使用 express-validation 和 joi 验证 Express Nodejs 字符串中的 body 参数是否可以转换为 JSON

How to validate if body parameter in Express Nodejs string can be converted to JSON using express-validation and joi

我正在创建一个接受 post 请求的函数。 post 请求还包含一个转换为字符串的 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()
        }
    }
};

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

It's documented in the API

Generates a schema object that matches an object data type (as well as JSON strings that parsed into objects).

例如,给定架构:

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"]'
  }
}

可以演示上面的示例here,只需将架构和示例数据粘贴到其中即可。