2016-05-17 5 views
2

未定義の値をチェックする適切な方法は何ですか?私がしたいのは、空でないフィールドを更新するPUTメソッドを持つことです。たとえば、req.body.name = 'John'req.body.jobを送信した場合は、名前の変更のみを要求します。

いくつかのコード:req.body.jobが空の場合、私は手動で確認することができ、それが設定されていれば、それは価値のユーザーに価値だ今

CastError: Cast to number failed for value "undefined" at path "job" 

:もちろん、この意志はエラーをスロー

router.put('/:id', (req, res) => { 
    const query = {_id: req.params.id}; 
    const update = { 
     $set: { 
      name: req.body.name, 
      job: req.body.job 
     } 
    }; 

    User.findOneAndUpdate(query, update, 
     (err, userUpdated) => { 
      if (err) { 
       console.log('Error while updating'); 
       console.log(err); 
      } else { 
       res.send(userUpdated); 
      } 
     }); 
}); 

以前は持っていましたが、それはハックのようで、エレガントではなく、各ルートごとにたくさん書いています。

私はdocsを確認しましたが、そこに提供されているオプションはありません。 express validatorのようなものも出てきましたが、値が空の場合はreturnになるでしょう。もう1つの選択肢は、単にフロントエンド部分から値を送信することです。

私はバックエンド開発には新しく、「正しい方法」をやっているかどうかは分かりません。だから、どうすればいいのですか(また、私のコードが奇妙に見える場合でも、私を案内することができます:))、ありがとう!

答えて

2

これを行う独自の方法を書くことができます。例えば

この例

var req = {body: {name: undefined, job: 'yes'}}; 
const _ = require('lodash'); 

const out = {}; 
_(req.body).forEach((value,key) => { 
    if (!_.isEmpty(value)){ 
     out[key] = value; 
    } 
}); 

console.log(out); 

は、この出力

{ job: 'yes' } 

したい場合は、この

としてそれを書く場合にも、ミドルウェアとしてそれを書くことができますをしています
function onlyNotEmpty(req, res, next) => { 
    const out = {}; 
    _(req.body).forEach((value, key) => { 
     if (!_.isEmpty(value)) { 
      out[key] = value; 
     } 
    }); 

    req.bodyNotEmpty = out; 
    next(); 
} 

次に、あなたはwrミドルウェアであなたの方法を教えてください

router.put('/:id', onlyNotEmpty, (req, res) => { 
    const query = {_id: req.params.id}; 
    const update = { 
     $set: req.bodyNotEmpty 
    }; 

    // This will be the same 
}); 
関連する問題