猫鼬不在生产(Heroku)上填充(.populate()),但在本地

时间:2019-01-20 07:52:52

标签: javascript mongodb heroku mongoose mlab

基本上,我正在其中一个时刻。我的应用程序在Heroku上,它使用的数据库是mLab(MongoDB)。

  • 它在本地(Cloud9)上有效,但在生产(Heroku)上无效。
  • 我无法获得 .populate()进行生产。

您是否在下面的代码段(代码段)中看到任何可能导致Heroku在本地运行时失败的空白?

谢谢。

(我曾尝试清除数据库(删除数据库并制作一个新数据库。另外,我在此站点上也遇到过类似的问题。我也曾尝试过' heroku local --tail ')命令调试并在我的本地计算机上运行;它在本地计算机上运行...只是不在Heroku上;似乎有错误。)

 People.find(id).populate("friends").exec(function(err, user){
        if(err){
            console.log("! Error retrieving user. " + err);
            reject ("! Error retrieving user. " + err);
        }
        else {
            console.log("0! Friends should be populated: " + user);
            resolve(user);
        }
    });

我的模特:

var mongoose = require('mongoose');

var personSchema = mongoose.Schema({
    name: String,
    friends: [    
        {
            id: {
                type: mongoose.Schema.Types.ObjectId,
                ref: "Person"
            },
            name: String
        }
    ],
    username: String,
    password: String,
    });

module.exports = mongoose.model("Person", personSchema);

2 个答案:

答案 0 :(得分:1)

您的API函数看起来还可以。

我怀疑您的问题与模型的设置方式或数据库中的内容有关。第一次尝试使用Heroku时,我遇到了类似的问题,因为Localhost更宽容。

为了使您的API正常工作,必须设置以下三项内容:

(1) Model file: people.js

必须看起来像这样:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var peopleSchema = new Schema({

  name: {
    type: String,
    required: true,
    trim: true
  },

  friends: [{
    type: Schema.Types.ObjectId,
    ref: "Friends"
  }]
});

const People = mongoose.model('Peoples', peopleSchema);

module.exports = People;

然后您必须具有“人”引用的“朋友”模型。

(2) Model file: friends.js

必须看起来像这样:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

// Create the Comment schema
var friendsSchema = new Schema({

  friend_name: {
    type: String,
    required: true,
    trim: true
  },
});

const Friends = mongoose.model('Friends', friendsSchema);

module.exports = Friends;

最后,为了使.Populate工作,您在数据库中至少需要两个文档。

(3) Database must contain a Person doc and a Friend doc 

必须看起来像这样:

people.js : 
    "_id": {
            "$oid": "5bef3480f202a8000984b3c5"
    }, 
    "name": "Monica Geller"
    "friends": [
        {
            "$oid": "5bef3480f202a8000984b5b4"
        }
    ]

friends.js :
    "_id": {
            "$oid": "5bef3480f202a8000984b5b4"
    },
    "friend_name": "Rachel Green"

希望这会有所帮助,或者使您更接近答案。

答案 1 :(得分:0)

这是一个版本问题。

必须确保所有平台(mLab和我的本地数据库)都使用相同版本的Mongoose。

npm install mongoose@5.4.8 --save