菜鳥轉職生如何解決的看似很簡單的問題
學期2–3遇到最困難的事情莫過於將本地的程式部署到雲端,沒錯就是Heroku 和 MongoDB Atlas。
先簡單介紹一下Heroku,他是一個能免費將自己的程式部署到雲端的PasS服務,可以讓我們省去架設主機等麻煩的過程,專注於優化自己的程式碼。
而 MongoDB Atlas 則是雲端資料庫伺服器,過去我都是使用 MongoDB 的本地資料庫來儲存資料,而現在已經將透過 Heroku 借用了他們的雲端主機,想當然資料庫也是要存在雲端囉!
而這兩個聽起來很方便的工具,卻常常因為一點小問題讓我一卡就卡了一下午或一整天,我認為是在串接這兩個工具上,時常會因不熟悉語法+不確定是否連接而造成問題。
以下先來分享讓我卡最久的一些問題:我在本地可以成功上傳種子資料,為何沒辦法上傳至MongoDB Atlas上
當初卡了很久,搜尋很久也沒有找到相關的說明(中文+英文),最後是休息一陣子後,換了一個想法也換了一個搜尋關鍵字heroku can not load seeds,結果神奇的在第一個結果就有答案,原因就是要上傳至雲端的種子資料與語法不同
當要上傳本地的資料庫時,只要打 npm run seed
就可以順利將種子資料從入本地資料庫
而若是要上傳至雲端的資料庫的話,就必須使用以下語法,需要在原先的指令多加 heroku run npm run seed
就可以成功上傳了!
而以為順利度過難關的我,在下一次作業中又遇到了下一個難關,在匯入雲端種子資料時,竟然又遇到另外一個問題,terminal中有以下的報錯資訊
mongoerror: authentication failed
這時候就覺得真的要固定設錯誤通知,才會知道每次錯誤時應該從哪邊追蹤debug。
以下分享我在找錯誤時的層層推進
- 先確認是否資料也匯入不了本地資料庫:
若是的話先確保資料能匯入本地資料庫,這時候很大可能是設定連線mongoose有問題 - 再確認串接至雲端的程式碼有沒有錯字
const mongoose = require(‘mongoose’);
const MONGODB_URI =
process.env.MONGODB_URI || ‘mongodb://localhost/url-shortener’;
mongoose.connect(MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
3. 確認在 heroku 中寫入 MongoDB Atlas 的連線資訊都沒有錯:尤其要確認帳號密碼的問題。
至於我是在哪部分出錯的,大概是在第三步驟才找到錯誤,我直接將錯誤訊息放到 google 搜尋,stack overflow幾乎都是建議查看帳號密碼是否填入錯誤,但實際上我也是由MongoDB Atlas 直接複製value,照理說是不會有錯的,但重點就是照著這個順序,我成功的將種子資料匯入雲端資料庫了!
在這個資料庫及學習程式的過程中,深深體會到『關鍵字』的重要性,結論:
真的要解決問題下對關鍵字超重要,直接省超多時間!