2016-06-02 18 views
0
NodeJSについては

、エクスプレス4、 は、時々私は、クライアントが処理されるように、この種のJSONデータを送信し、ルートを書き、JSONコンテンツポスト要求の検証の練習

{ 
    "data" : "xx" 
    "nested" : { 
     field1: "111", 
     field2: "222" 
    } 
} 

そして、サーバ側で、私はしばしば見つけます私自身は、このような

if (!validVariable(req.body.data)) //error 
if (!validVariable(req.body.nested)) //error 
if (validVariable(req.body.nested)) { 
    if (!validVariable(req.body.nested.field1) // error 
    if (!validVariable(req.body.nested.field2) // error 
} 
..... 
function validVariable(input) { 
    return (typeof input !== 'undefined') && input; 
} 

として、マニュアルの検証をたくさんやって私が先に行くとreq.body.nested.field1を使用している場合、私はクラッシュする可能性があり、常に安全にPOSTリクエストのコンテンツにアクセスする前に、構造体をテストすることは非常に面倒ですreq.bodyからのヌルポインタ例外によるサーバネストされた。

私はフォームのコンテンツのサーバーの検証は、この退屈だとは思わない?人々は通常何をしていますか? 私はnode-validator、express-validatorを見てきました。本当に便利ですが、手動でjsonデータをテストしていますか?より良い方法がありますか?

また、クライアントが送信したデータ型を気にして、実際に手動でデータ型をチェックすることを考えていますか? isBoolen? isInt? isStringなど。これは本当に退屈なので、javascriptの検証との洞察は本当に役立ちます! ありがとうございました!

+0

を参照してください。問題はJSONとは関係なく、安全にネストされたオブジェクトにアクセスする方法を示しています。 JSONは単なるテキストです。うまくいけば、これはより良い検索用語を使用して既存の質問を見つけるのに役立ちます。 –

+0

check http://json-schema.org彼らは複数の言語でバリデーターを持っています –

答えて

0

は、あなたがあなたのJSONを検証し、その後、最初のスキーマを定義https://github.com/hapijs/joi

を見てください。

+0

これは本当に良いです! https://github.com/ctavan/express-validatorの意見はありますか? – Zanko

1

Ivは、この目的のためにAjvライブラリを使用していました。そしてそれは私のためにうまくいった。単純に以下を実行してください

1)期待する要求のスキーマを定義してください。必要なフィールドとデータ型をスキーマ定義に指定する必要があります。

2)インポートと要求について間違っていたかについての詳細は、検証のステータスとajv.errorsため

var valid = ajv.validate(schema,request); 

チェックvalidを使用して要求を検証し、ライブラリをインストールします。 詳細については、https://github.com/epoberezkin/ajv