2016-11-06 4 views
0

mongodb.Butの名前フィールドを変更できる編集ページを追加しようとしていますが、ルーティングに問題があります。ここでは、ルーティングです:ノードjs expressとPUG(JADE)のMongodbを更新します

extends layout 

block content 
    .main.container.clearfix 
    h1 Editing #{name}'s profile! 
    form(method="POST", action="/edit") 
    input(type="hidden", name="_method", value="PUT") 
    p Name: 
     input#name.form-control(type='text', value='#{name}') 
    p 
     input(type="submit") 

ありがとうedit.pugされ、ここで

router.put('/edit', function(req, res) { 
user.findByIdAndUpdate({_id: req.params.id}, 
       { 
     name: req.body.name 
    }); 
    }); 

そして

答えて

0

さて、私はここを参照してくださいいくつかのこと、私は私が片付ける助けることができると思いますがあります。

user.findByIdAndUpdate - 最初の引数のためにオブジェクトを取っておらず、_idだけです。 http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

req.params - このコールバックが装着されているルートに接続されているので、あなたのルートにあなたは値が変更できることを表現するのではなく、req.params.idとして利用できるようになります/:idを配置する必要があります。基本的にはあなたのルートは、あなたはまた、デフォルトでは、更新後のDBに保存された一つがされていないその検索から原稿を返すので、findByIdAndUpdate方法のoptions引数に見たいことがありrouter.put('/edit/:id', function(req, res) {... http://expressjs.com/en/guide/routing.html#route-parameters

のようになります。適用される。

ので、あなたのノードのコードは次のようになります。

router.put('/edit/:id', function(req, res) { 
user.findByIdAndUpdate(
    req.params.id, // Which _id mongoose should search for 
    { name: req.body.name }, //Updates to apply to the found document. 
    { new: true }); // This tells mongoose to return the new updates back from the db 
    }); 
関連する問題