2016-07-11 2 views
1

現在のバージョンのMassiveJSを使用し、API呼び出しを表現します。 SAVE機能を使用する場合、大規模は、次のように列名のリストを更新したい:RESTのput/post保存にMassiveJSを使用する

router.put('/:id', function(req, res, next) { 
    db.suppliers.save(
    { 
     id: +req.params.id, 
     name: req.body.name, 
     email: req.body.email, 
     column1: req.body.column1, 
     column2: req.body.column2, 
     column3: req.body.column3, 
     manyOtherColumns: req.body.manyOtherColumns, 
     etc... 
    }, function (err, result) { 
     if (err) { 
     return next(err); 
     } 
     return res.status(200).json({ 
     status: 'SUCCESS', 
     message: 'Supplier has been saved' 
     }); 
    }) 
}); 

あなたが見ることができるように列リストが長くなってきたように、このコードを維持することがより困難になります。 Req.bodyのキー値がdbの列名と一致すると仮定して、req.bodyの全体を1回の呼び出しで保存する方法があるかどうか疑問に思っていました。それは多くの時間を節約し、はるかにメンテナンス可能になります。

+0

はあなたがオーバー投稿に精通していますか?これにより、悪意のあるユーザーはadmin:trueを設定できます。私は本当にあなたのフォームの投稿をリストするホワイトをお勧めします。 –

+0

私はオーバーポスト/ホワイトリストに精通していません。 RESTを使用したフォームの投稿を示すすべてのトレーニングの例では、これらの概念について言及していません。 Google検索では、私のシナリオでは、混乱した反応や明確なアプローチを適用しません。 - MassiveJSとExpress/Express.Router()。さて、あなたは私の好奇心だけでなく、少しの欲求不満を抱いています。複雑さのもう一つの層は、データをdbバックエンドにポストするといった単純なものにも適用する必要があります。あなたが私の理解を助けるために提供することができるものはありますか?具体的にはあなたのソリューションに適用されるもの、Massive? – CCPony

+0

ロブ - 私はあなたがこの記事のようなものを参照していると信じています:http://stackoverflow.com/questions/28701258/mysql-whitelist-query。これは私が完全に理解しており、悪質な投稿を防止するための保護手段を組み込んでおり、ユーザーが権限のあるデータのみにアクセスし、権限のある人のみから投稿できることを保証します。私はちょうど "ホワイトリスト"という言葉に慣れていませんでした。これは何らかの理由で、Massive.save()を使用しているときに何十も何十ものカラムを列挙するという退屈さとメンテナンスの問題に関する私の最初の質問に関連していますか?それを行う良い方法はありますか? – CCPony

答えて

2

MassiveはORMではないため、「オブジェクト」を保存することは考えられません。何かを更新したい場合は、直接db.updateを使用して更新したい値と行のIDを渡してください。これにより部分的な更新が行われます。

私がコメントで述べたように、ユーザーがPOSTを介して送信したものを更新するためにRESTエンドポイントを開くことは、ユーザーを信頼してもおそらく良い考えではありません。

最後に:あなただけのフォームポストに沿って渡したい場合は、あなたがすることができます

router.put('/:id', function(req, res, next) { 
    var supplier = { 
    id: req.params.id; 
    }; 
    supplier = _.extend(supplier, req.params.body); 
    db.suppliers.save(
    supplier 
    , function (err, result) { 
     if (err) { 
     return next(err); 
     } 
     return res.status(200).json({ 
     status: 'SUCCESS', 
     message: 'Supplier has been saved' 
     }); 
    }) 
}); 
+0

うわー。この新しい私。私は理解するのに苦労している。 「アクティブレコード」パターン(すべてのテーブル列にアクセス可能)を使用して転記すると、大量割り当て攻撃の可能性が生じることを私に伝えているようです。そして、私があなたを正しく理解しているならば、POSTが更新する列を箇条書きにすることで、このような攻撃は回避されます。これはあなたが書式の投稿をホワイトリストに載せることと呼んでいますか? – CCPony

関連する問題