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

时间:2017-04-22 15:48:36

标签: node.js validation express joi

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

1 个答案:

答案 0 :(得分:1)

对问题发表评论时,Joi.object()仍可使用JSON字符串,Joi.array()也适用。

It's documented in the 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"]'
  }
}

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

即可