2017-04-22 3 views
1

投稿要求を受け入れる関数を作成しています。投稿要求には、JSONオブジェクトがStringに変換されています。バックエンドでは、この文字列を実際にJSONに解析してから処理を進めることができるかどうかを検証する必要があります。ここでExpress Nodejs文字列のbodyパラメーターを高速検証とjoiを使用して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() 
     } 
    } 
}; 
+0

私はあなたの質問を正しく聞いたが、 'Joi.object()'はあなたのために仕事をしないだろうか? – Panther

+0

'Joi.object()'は、その変数がオブジェクトであるかどうかを直接チェックしますか?文字列をオブジェクトに変換してから参照する必要があります。 – tsaebeht

答えて

1

としてはJoi.object()はまだあまりにも動作しますJoi.array()JSON文字列、で動作します、質問にコメントしています。

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をデモすることができます。

関連する問題