検証

2016-05-27 6 views
0
私はノードを使用してREST APIを構築してい

私は私がこの検証

var CategorySchema = new Schema({ 
    name: { 
     type: String, 
     lowercase: true, 
     default: '', 
     trim: true, 
     unique: [true, 'Category name already exists'], 
     required: [true, 'Category Name cannot be blank'], 
     minlength: [4, 'Minimum 4 characters required'], 
     maxlength: [20, 'Category name cannot be That long'] 
    }, 
    parentCategory: { 
     type: String, 
     lowercase: true, 
     default: '', 
     trim: true 
    }, 
    description: { 
     type: String, 
     lowercase: true, 
     default: '', 
     trim: true, 
     required: [true, 'description cannot be blank'], 
     minlength: [10, 'Very short description'] 
    }, 
    slug: { 
     type: String, 
     lowercase: true, 
     unique: [true, 'Slug must be unique'], 
     required: true, 
     minlength: [4, "Minimum 4 Charater required"], 
     maxlength: [20, "Slug cannot be that long"] 
    }, 
    imageUrl: { 
     type: String, 
     default: '', 
     trim: true 
    }, 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    updated: { 
     type: Date 
    } 
}); 

    module.exports = mongoose.model('Category', CategorySchema); 


i am insert data using mongoose models like this 

exports.createCategory = function (request, response) { 

    var newCategory = { 
     "name": request.body.categoryName, 
     "parentCategory": request.body.parentCategory, 
     "description": request.body.description, 
     "slug": request.body.slug, 
     "imageUrl": request.body.categoryImage, 
     "updated": new Date() 
    } 

    var category = new Category(newCategory); 

    category.save() 
     .then(function (category) { 
      sendResponse(response, 201, "success", category); 
     }) 
     .catch(function (error) { 
      sendResponse(response, 400, "error", error); 
     }); 
}; 
のようにスキーマを定義していることを行うことができますどのようにリクエストを投稿する検証を追加したい、表現し、MongoDBの(使用マングース)

ですが、投稿リクエストに検証を追加したいと考えています。私は、データベースに定義されているフィールドがリクエスト内にあり、値も必要であることを確認する必要があります。リクエストボディ内のJSONオブジェクトのキーを検証する方法が本当に混乱しています。私は既にいくつかの検証をmongooseを使って追加しました。

答えて

0

(あなたが明示フレームワークを使用している場合)あなたが好き、この目的のためにミドルウェアを使用することができます。

app.use(function (req, res, next) { 
 
    var validationErrors = []; 
 
    validationErrors = some_function_to_validate(req); // Returns array 
 

 
    if(validationErrors.length > 0) { 
 
     // Send Custom Response with Validation Error 
 
    } 
 
    else { 
 
     next(); 
 
    } 
 
});

注:本ミドルウェアは、あなたの要求のすべてのために実行されます(もしすべてのルート登録の前に追加されます)。より多くの場合

参照してください。http://expressjs.com/en/guide/using-middleware.html

+0

私はミドルウェアが定義している知っているが、どのように指定されたノートと、上記のコードを試してみました – Rayees

+0

? –

+0

jsonとsome_function_to_validate(req)reqの答えが必要です。どうすればいいのですか? – Rayees

0

を有効フィールドを取得するには、次のコードを試してみてください。フィールドが必要でない場合は、reqを返します。これが役立つことを願っています。

function validateReq(req) 
 
{ 
 
    if(req) 
 
    { 
 
     var prop = ['name','parentCategory','description'] //Add more property name here 
 
     var found = false; 
 
     for(var key in req.body) 
 
     { 
 
     if (prop[key] && (prop[key] !== null)) 
 
     { 
 
      found = true; 
 
     } 
 
     else 
 
     { 
 
      return false; 
 

 
     } 
 
     } 
 
    } 
 
    else 
 
    
 
    { 
 
     return false; 
 
    } 
 
    } 
 

 
exports.createCategory = function (request, response) { 
 

 
    var valid = validateReq(request); 
 
    alert(valid); 
 
    if(valid){ 
 
    var newCategory = { 
 
     "name": request.body.categoryName, 
 
     "parentCategory": request.body.parentCategory, 
 
     "description": request.body.description, 
 
     "slug": request.body.slug, 
 
     "imageUrl": request.body.categoryImage, 
 
     "updated": new Date() 
 
    } 
 

 
    var category = new Category(newCategory); 
 

 
    category.save() 
 
     .then(function (category) { 
 
      sendResponse(response, 201, "success", category); 
 
     }) 
 
     .catch(function (error) { 
 
      sendResponse(response, 400, "error", error); 
 
     }); 
 
    } 
 
    else 
 
    { 
 
     //Error handling code 
 
     } 
 
};

+0

なぜループを実行するのですか?他の最適化された方法がなければならない – Rayees