2016-06-08 68 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

相關問題