Mongoose не заполняет (.populate ()) на производстве (Heroku), но работает на локальном - PullRequest
0 голосов
/ 20 января 2019

По сути, у меня один из тех моментов.Мое приложение на 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 голосов
/ 01 февраля 2019

Это была проблема версии.

Нужно было убедиться, что все платформы (mLab и моя локальная база данных) использовали одну и ту же версию Mongoose.

npm install mongoose@5.4.8 --save 
0 голосов
/ 23 января 2019

Ваша функция API выглядит нормально.

Я подозреваю, что ваша проблема в том, как настроены ваши модели или что находится в вашей базе данных.У меня были подобные проблемы в первый раз, когда я пытался использовать Heroku, потому что Localhost более щадящий.

Чтобы ваш API работал, необходимо настроить следующие 3 вещи:

(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"

Надеюсь, это поможет или приблизит вас к вашему ответу.

...