基本上,我正在其中一个时刻。我的应用程序在Heroku上,它使用的数据库是mLab(MongoDB)。
您是否在下面的代码段(代码段)中看到任何可能导致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);
答案 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