2016-03-23 12 views
0

NodeJS + ExpressJSを使用してチケットを発行しています。 PUTメソッドで、次のエラーが発生する前に作成されたチケットを変更します。保存はExpressJSの機能ではありません

エラー

/home/ismael/projects/nodejs-ticketing/routes/ticket.js:38 
     item.save(function(err){ 
     ^

TypeError: item.save is not a function 
    at /home/ismael/projects/nodejs-ticketing/routes/ticket.js:38:12 
    at Query.<anonymous> (/home/ismael/projects/nodejs-ticketing/node_modules/mongoose/lib/query.js:2169:28) 
    at /home/ismael/projects/nodejs-ticketing/node_modules/kareem/index.js:177:19 
    at /home/ismael/projects/nodejs-ticketing/node_modules/kareem/index.js:109:16 
    at _combinedTickCallback (node.js:370:9) 
    at process._tickCallback (node.js:401:11) 
[nodemon] app crashed - waiting for file changes before starting... 

私がチケットを変更するために呼び出す関数は、次のいずれかです。

_modifyPutTicket = function(req, res){ 
    var query = Ticket.findOne().where('issue').equals(req.params.issue).lean(); 

    log.debug('New data: ' + JSON.stringify(req.body)); 

    query.exec(function(err, item){ 
     if(err) 
     res.send(err); 

     log.debug('Issue: ' + JSON.stringify(item)); 

     item.title   = req.body.title; 
     item.description = req.body.description; 

     log.debug('Issue modified: ' + JSON.stringify(item)); 

     item.save(function(err){ 
     if(err){ 
      log.debug('Issue error: ' + err); 

      res.send(err); 
     }else{ 
      res.send(item); 
     } 
     }); 
    }); 
    }; 

app.put('/api/ticket/:issue/', _modifyPutTicket); 

ticket.js私が更新するために、マングースのチュートリアルに従っMongoDBに保存されている文書。私は間違っているの?

ありがとう。

答えて

3

問題は、クエリを作成するときにlean()を使用することです。 leanを使って見つかった文書は、完全なMongoose文書の代わりにJavascriptオブジェクトとして返され、getter/setterはありません。

http://mongoosejs.com/docs/api.html#query_Query-lean

関連する問題