2017-02-15 15 views
0

我有這個問題DeprecationWarning:貓鼬:mpromise

(node:10372) DeprecationWarning: Mongoose: mpromise (mongoose's default 
promise library) is deprecated, plug in your own promise library instead: 
http://mongoosejs.com/docs/promises.html 

我嘗試這個解決

mongoose.Promise = global.Promise; 
mongoose.Promise = require('bluebird'); 
mongoose.Promise = require('q').Promise; 

沒有人解決了這個問題。

而這個問題我有另一個問題 - 不工作遞減。 data.likes -= 1;

貓鼬只是不救這個!更準確地說,貓鼬可以節省時間。我聽說這個問題可能會被稱呼爲承諾。

Post.findById(req.body._id, function(err, data) { 
    if (err) {console.log(err);} 

    if (data.voited[req.session.id] == true) { 
     data.voited[req.session.id] = false; 
     data.likes += 1; 
     var post = new Post(data); 
     post.save(function(err, data) { 
      if (err) { 
       console.log(err); 
       res.send({status:416}); 
      } else { 
       res.send({status:200, likes: true}); 
      } 
     }); 
    } else { 
     data.voited[req.session.id] = true; 
     data.likes -= 1; 
     var post = new Post(data); 
     post.save(function(err, data) { 
      if (err) { 
       console.log(err); 
       res.send({status:416}); 
      } else { 
       res.send({status:200, likes: false}); 
      } 
     }); 
    } 
}) 

怎麼辦?刪除貓鼬?我不會想重寫所有項目..

貓鼬4.8.2

回答

2

你連接之前設置Promise

const mongoose = require('mongoose'); 
mongoose.Promise = global.Promise; 
mongoose.connect('mongodb://...'); 

還要確保您設置的Promise只要您使用貓鼬,甚至在你的Schema

正如此issue中所述。

編輯:關於遞減問題(如果您不在其他地方使用承諾,我相信這與前一個問題有關)。嘗試這個。

Post.findById(req.body._id, function(err,data) { 
    if (err) {console.log(err);} 

    var session = data.voited[req.session.id]; 

    if (session == true) { 
     Post.update({_id: req.body._id}, {$inc: {likes: 1}, voited: {[req.session.id]: false}}, function(err, data) { 
      if (err) { console.log(err); } 
      res.send({ status:200, likes: true }); 
      }); 
    } else { 
     Post.update({_id: req.body._id}, {$inc: {likes: -1}, voited: {[req.session.id]: true}}, function(err, data) { 
      if (err) { console.log(err); } 
      res.send({ status:200, likes: false }); 
     }); 
    } 
}); 
+0

是的,之前。問題解決了。我在'Schema中設置了'mongoose.Promise = global.Promise;'但遞減仍然不起作用。你知道嗎? – Lestoroer

+0

剛剛編輯我的初始答案。 除非您在代碼中的其他地方使用promise,否則我認爲這些問題實際上是相關的。如果刪除'新的Post(data)'解決了你的問題,你也可以安全地刪除之前添加的'mongoose.Promise'聲明。 這就是說,如果你要使用承諾,保持它也沒有什麼壞處。 –

+0

剛剛注意到在[issue](https://github.com/Automattic/mongoose/issues/4291)上有一個關於保存總是返回一個承諾的提示(即使提供了回調)。所以你應該保留'mongoose.Promise'聲明。 –