2017-03-17 19 views
0

サーバー側で受信データを検証する正しい方法は何ですか? 私はisObjectまたはisArrayなどの簡単な検証のためにlodashを使用しています。isEmailという文字列を検証する必要がある場合はvalidatorです。しかし、これはすべて厄介なように見えますが、これがパフォーマンスを傷つけるかどうかは分かりません。NodeJS:サーバー側の要求データの検証

着信データをより洗練された方法で検証する方法があるはずです。

答えて

0

1つの方法はschema-inspectorを使用することです。

json-schemaの記述に基づいてjsonオブジェクトを検証するためのモジュールです。ここで

はgithubののREADMEからの例です:

var inspector = require('schema-inspector'); 

// Data that we want to sanitize and validate 
var data = { 
    firstname: 'sterling ', 
    lastname: ' archer', 
    jobs: 'Special agent, cocaine Dealer', 
    email: 'NEVER!', 
}; 

// Sanitization Schema 
var sanitization = { 
    type: 'object', 
    properties: { 
     firstname: { type: 'string', rules: ['trim', 'title'] }, 
     lastname: { type: 'string', rules: ['trim', 'title'] }, 
     jobs: { 
      type: 'array', 
      splitWith: ',', 
      items: { type: 'string', rules: ['trim', 'title'] } 
     }, 
     email: { type: 'string', rules: ['trim', 'lower'] } 
    } 
}; 
// Let's update the data 
inspector.sanitize(sanitization, data); 
/* 
data is now: 
{ 
    firstname: 'Sterling', 
    lastname: 'Archer', 
    jobs: ['Special Agent', 'Cocaine Dealer'], 
    email: 'never!' 
} 
*/ 

// Validation schema 
var validation = { 
    type: 'object', 
    properties: { 
     firstname: { type: 'string', minLength: 1 }, 
     lastname: { type: 'string', minLength: 1 }, 
     jobs: { 
      type: 'array', 
      items: { type: 'string', minLength: 1 } 
     }, 
     email: { type: 'string', pattern: 'email' } 
    } 
}; 
var result = inspector.validate(validation, data); 
if (!result.valid) 
    console.log(result.format()); 
/* 
    Property @.email: must match [email], but is equal to "never!" 
*/ 

sanitizationスキーマは(など、文字列に数値を変換しようと、オプションの値を設定する)ことを検証する前に、あなたのJSONを「きれい」ことを意図しています。

validationスキーマは、jsonが尊重すべきプロパティを記述します。

次に、inspector.validateに電話して、すべて正常かどうかを確認します。

関連する問題