2016-06-08 65 views
0

我已经使用mlab在heroku上托管了我的MEAN应用程序,以提供我需要的mongodb数据库。mLARAB数据库无法从heroku托管的MEAN应用程序

在我的应用程序,我使用连接到数据库:

mongoose.connect(process.env.MONGODB_URI); 

在我的应用程序,我宣布我的模型:

mongoose.model('Course', CourseSchema); 

如果我理解正确的话,猫鼬将寻找一个命名集合培训班。

我一直在使用进口收集到MLAB:

​​

它的工作,消息:imported 350 documents

然而,我的应用程序不显示任何数据,同时它的工作原理在本地。

可能会发生什么?我是一个总的初学者,真的不知道从哪里开始:)

编辑:

在我的应用程序,我已经由路由触发的数据库上的GET请求:/courses

这里是我获取日志中的有关该GET请求:

2016-06-09T17:33:57.000199+00:00 app[web.1]: GET /courses 304 2.473 ms - - 
2016-06-09T17:34:34.739488+00:00 heroku[router]: at=info method=GET path="/" host=c 
mtproto.herokuapp.com request_id=dbdef76d-78b2-4d4c-b509-a18c6194cc18 fwd="87.91.22 
.213" dyno=web.1 connect=0ms service=2ms status=304 bytes=147 
2016-06-09T17:34:34.734195+00:00 app[web.1]: GET/304 1.106 ms - - 

我真的很困惑,我只是想我的应用程序在本地与本地数据库(在本地主机上)没有任何问题。

然后我在本地使用我的mongolab uri连接到由mlab管理的数据库。连接工作(响应:200),但我的应用程序没有数据。然后我开始使用curl http://localhost:3000/courses并得到一个空数组作为响应。

我不认为问题来自我的获取请求的代码,因为它连接到我的本地主机数据库时工作。我的GET请求的代码:

router.get('/courses', function(req, res, next) { 
    Course.find(function(err, courses){ 
    if(err){ return next(err); } 

    res.json(courses); 
    }).select({ "name": 1, "_id": 1, 'code': 1, 'courseContentGrade': 1, 'courseTeachingGrade': 1, 'courseAverage': 1}); 
}); 

它也像我成功地连接到数据库MLAB,因为我得到一个200码response.I得到304如果我使用POST请求,但。

这里是在数据库中的数据是这样的:

[{ 
    "_id": { 
     "$oid": "5759ddbfe71976730e6df425" 
    }, 
    "code": "XXXXXX ", 
    "name": "Negotiation", 
    "courseContentGrade": "3.0", 
    "courseTeachingGrade": "8.0", 
    "courseAverage": "5.5", 
    "reviews": [ 
     { 
      "name": "Advanced Negotiation Workshop", 
      "professor": "Aenean sed", 
      "contentReview": "Lorem ipsum dolor sit amet, consectetur adipiscing", 
      "teachingReview": "In in ipsum odio. Nulla sodales nulla vel vulputate lobortis. Curabitur ut.", 
      "contentGrade": 3, 
      "teachingGrade": 8, 
      "average": "5,5", 
      "trimester": "T3", 
      "day": "Semaine bloquée", 
      "time": "Semaine bloquée", 
      "round": "1er tour/1st round", 
      "bet": 21, 
      "year": "2014/2015", 
      "upvotes": 0, 
      "author": "Piranha" 
     } 
    ] 
}, 

{ 
    "_id": { 
     "$oid": "5759ddbfe71976730e6df42a" 
    }, 
    "code": "XXXXXXXX", 
    "name": "Germany", 
    "courseContentGrade": null, 
    "courseTeachingGrade": null, 
    "courseAverage": null, 
    "reviews": [] 
}] 

什么我应该检查任何其他提示吗?

+0

你在Heroku中设置了你的进程环境变量吗? –

回答

0

问题解决了!

Mongo不喜欢大写字母,我只用小写字母将我的收藏集重命名,现在一切都完美了。

不知道为什么它在我的电脑上工作,但不在heroku上,虽然...

0

在部署应用程序时,最好将API密钥和身份验证相关的变量保留在代码库之外。这样,即使代码库被共享,您的秘密也是安全的。使用process.env对象可以将这些秘密应用于运行时间,该对象可以存储所有这些环境变量。

对于基于Heroku的部署,您可以通过使用以下命令来设置环境变量:

heroku config:set GITHUB_USERNAME=vikramtiwari

更多细节:https://devcenter.heroku.com/articles/config-vars

一旦这些变量设定的程序可以运行期间使用它时间。在你的情况下,你的MEAN应用程序试图找到这些值,但无法得到它们,因此没有显示数据。检查您的日志(heroku logs)以确认该应用程序未连接到MongoDB。

+0

感谢您的回答。我必须设置哪些变量?我认为MONGODB_URI足以连接到数据库。我查看是否还有其他设置在该链接上:https://devcenter.heroku.com/articles/mean-apps-restful-api我错过了什么? – Puck7

+0

如果您的MONGODB_URI已设置,则应该连接。检查你的日志中的任何信息。 –

+0

它被设置,我只有那个变量,应该有其他吗?你给了我一个关于github的例子,有什么理由吗?我有麻烦理解日志,我会编辑我的问题,包括日志和什么使我困惑:) – Puck7

相关问题