2016-05-10 7 views
0

私はサーバー側でいくつか質問があります。ノード+ Json形式のバリデーター

私は50以上のAPIを持っています。

すべてのAPI(GET、POST)メソッドを次のようにチェックする必要があります。

  1. 入力が有効であることを検証します。
  2. 入力データは、キー名の一部をデータでチェックする必要があります。例えば1

:私はいくつかのキーをチェックする必要があり、この上記の入力で

{ 
     "name": "<city name1>", 
     "status": 1, 
     "id" : 3, 
     "code" : 5, 
     "abcd" : "44", 
     --------------- 
     ------------ 
} 

はmantoryです。例えば:名前、コード

例2:

{ 
    "country": [ 
     { 
      "state": [ 
       { 
        "name": "<city name1>", 
        "status": 1 
       }, { 
        "name": "<city name2>", 
        "status": 2 
       }, { 
        "name": "<city name3>", 
        "status": 3 
       } 
      ], 
      "name": "<state Name1>" 
     }, { 
      "state": [ 
       { 
        "name": "<city name1>", 
        "status": 1 
       }, { 
        "name": "<city name2>", 
        "status": 2 
       }, { 
        "name": "<city name3>", 
        "status": 3 
       } 
      ], 
      "name": "<state Name2>" 
     } 
    ] 
} 

私は国家や都市をチェックする必要があり、上記の例では、>名前は必須です。

私はパッケージをチェックしましたが、私には適していません。

json検証を確認するパッケージはありますか?

+0

を定義することができます。 Expressのようなフレームワークを使用するか、単純なhttpモジュール – bilalmetla

+0

を使用しています。私はexpressを使用しています。 – RSKMR

+0

jsonスキーマもhttp://json-schema.org/で検索できます。 5月助けてください。 –

答えて

0

私はvalidatorを使用します。 isEmail、isAlphaNumericなど多くの機能を持っています。

サニタイズにも対応しています。レポのサンプルとテスト。

キーが存在する場合、あなたはそれらのオプションが速くなり、バック消費者に非常に固有のカスタム・チェックとより良いエラーメッセージを作る能力を提供します

Check if a key exists inside a json object

標準hasOwnPropertyをを使用することができます確認するには。

もう1つのオプションはjsonスキーマです。単純にコードをチェックするほうが速いかもしれませんが(上記)、jsonスキーマを使用すると、APIごとにスキーマファイルをロードする共通コードを作成してコードが少なくなる可能性があります。

例のlib。

https://www.npmjs.com/package/jsonschema

だから、それはより多くの/より少ないコード、パフォーマンスとどのようにカスタムあなたのチェックとエラーメッセージがなりたいのバランスです。

+0

私はパッケージをチェックしました。私は検証することができません。あなたは例を書いてください。それは私のために多くの役に立つでしょう。 – RSKMR

+0

このプラグインは、キーが存在するかどうかをチェックしますか? – RSKMR

+0

投稿を更新しました。それらはあなたが正しい方向に行くようにする必要があります。どちらもドキュメントとサンプルを持っています。 – bryanmac

0

あなたがエステートしている場合は、この解決策を試してくださいhttps://github.com/askucher/ftjs。あなたが書き込みあなたのAPIを持ってどのように

npm install ftjs

あなたがタイプ定義ファイル(例)

#SimpleTypes 
 

 
String   : /.?/ 
 

 
Integer  : Global.Integer 
 

 
Int   : Integer 
 

 
Boolean  : Global.Boolean 
 

 
Bool   : Boolean 
 

 
Double   : Global.Double 
 

 
Numeric  : Double | Integer 
 

 
Null   : Global.Null 
 

 
Undefined  : Global.Undefined 
 

 
Email   : /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i 
 

 
Strings  : [String] 
 

 
#TypeExtensions 
 

 
String... 
 
Min min  : /^.{#{min},}$/ 
 
Max max  : /^.{,#{max}}$/ 
 
Range min max : /^.{#{min},#{max}}$/ 
 

 
Integer... 
 
Min min  : @ >= min 
 
Max max  : @ <= max 
 

 

 
#Enums 
 

 
Status   : "active" | "inactive" 
 

 
Missing  : Null | Undefined 
 

 

 
#ComplexTypes 
 

 
User 
 
------------ 
 
email   : Email 
 
picture  : String 
 
firstname  : String Range(5,20) 
 
lastname  : String Min(5) Max(20) 
 
status   : Status 
 
bio   : String | Missing 
 
tags   : [String]

var types = require("ftjs"); 
 
    var fs = require("fs"); 
 

 
    var validate = types({ 
 
     System: fs.readFileSync("./examples/System.ft").toString("utf8") 
 
    }); 
 

 
    var user = { 
 
     email: '[email protected]', 
 
     picture: 'http://some-website.com/picture.png', 
 
     firstname: 'Andrey', 
 
     lastname: 'Test', 
 
     status: 'active', 
 
     bio: 'Ho', 
 
     tags: ["user"] 
 
    }; 
 

 
    validate("System.User", user); //true