首頁 >web前端 >js教程 >使用node.js半年來總結的 10 個經驗_node.js

使用node.js半年來總結的 10 個經驗_node.js

WBOY
WBOY原創
2016-05-16 16:39:151137瀏覽

先不說房價,塞車,霧霾。 。 。先說說我這半年使用 Node.js 的經驗吧。 。 。都是工作上遇到的問題,血的教訓。 。

1.精確版本號

“一定要精確到具體版本號!使用*直接滾,^和~都不行!”,早上剛到公司,我們服務器的頭頭滿眼血絲(估計又凌晨幾點睡的),對我抱怨道:「媽蛋,以前寫的程式碼package.json裡的版本和伺服器正在運行的版本不一樣。安裝最新的又咣咣一頓報錯。」這裡省略幾千字。 。 。

好吧。我先打自己臉。以前只會用*。 。 。大多時候也沒必要寫死版本號,使用^和~也可以。掃一下盲:

semver
node.js 中的版本管理

2.檢定

一定要寫測試案例。就拿我來說,我負責的那塊包含過濾部分(用正則神馬的過濾文本,提取出有用的文本)。有了測試案例,每次改動過濾規則後,npm test 下,妥妥的。依個人喜好挑選使用的測試模組,mocha, should, tape, tap, supertest 等等。

嘗試本地運行,測試成功後才上傳到伺服器。我好幾次改完程式碼(就簡單的改了幾行)以為怎麼可能會出問題,結果一重啟伺服器就掛了。 。尼瑪少了括號什麼的。 。這種問題也可以透過使用jslint或jshint等編輯器外掛程式來偵測低階語法錯誤。

伺服器程式碼備份。目前我使用的方法:起初伺服器上有兩個一模一樣的工程(git庫,檔案名稱不一樣),一個正在運行,另一個當作備份。當有程式碼改變時,到備份工程下 git pull ,然後停止正在執行的程序,啟動備份的程序。假如程序經過一段時間沒有掛掉也就是感覺比較穩定後,將此工程當作主,另一個工程當作備。當又有改動時,重複以上步驟,主備來回切換。假如程式掛掉了,切換回較穩定的備即可。

3.使用 debug

寫程式免不了調試,很多人喜歡並習慣用萬能的 console.log() ,包括我。 。就我個人而言,我使用 console.log() 調完後,不是刪掉就是註解掉。刪掉吧以後也許還會用到,註解掉吧怪難看。這時候不妨用用 debug 模組。暫時沒用過 node-inspector,不做評價。

4.保持程式碼精簡

試著用較少的程式碼完成較多的事情,也是對自己能力的提升與考驗。包括正確的縮進,恰當的變數名,清晰的程式碼組織結構等等。 。程式碼精簡了,漂亮了,當出問題了回頭查錯也快,總比先弄清楚一團亂糟的程式碼乾了些什麼就花了幾個小時強。

如果團隊沒有使用CoffeeScript的話就不要使用它。一是別人無法讀懂你的程式碼幫你糾錯。二是出錯後顯示出錯的行數和coffee程式碼的行數不一樣。 。 。自己的開源專案可以用用。

5.多請教,保持獨立思考

剛開始工作的時候,我也各種一頭霧水,包括技術上的不足和業務邏輯上的欠缺,常常請教團隊內的大牛。而後我會試著彌補技術上的不足,理清業務上的邏輯。後來有一次,我要依照PM 的要求設計一個api,既要考慮使用者的需求(多客戶端的情況),客戶端的需求和行為,資料庫的設計(怎麼存冗餘少,查詢次數少,易擴展,易修改,差量查詢)等等,考慮了一個週多,幾近崩潰。 。 。雖然我和頭頭商量了好多次,但它總是給我理邏輯,不告訴我方法。後來終於找了一種還不錯的解決方式。 。他後來也告訴我,想讓我保持獨立思考解決問題,這樣才能有進步。 。

6.使用現有的函式庫

目前npm上已經有近9W的第三方模組了,理論上想用的都能在npm上找到,當然npm上不乏非常多的優秀的模組,文檔全面,使用也非常方便,通常都會滿足需求。假如你發現某個模組能滿足大部分需求可以有功能上的完善,或有bug,可以去github上提pr,假如你發現沒能找到滿足的模組的話,可以自己創建個並npm publish到npm上與大家共享。當然你發現某一類別實作某個功能的模組都很shit的話,你也可以publish個不shit的。

7.保持簡單

假如你想展示一個餅圖的話,用 HTML5 canvas 或 CSS3 即可,沒必要用 C 的 canvas 庫畫一個圖片,“光下載依賴的庫就 400 MB”,頭頭如是說。

8.良好的文件

良好的文件是客戶端與伺服器團隊溝通的最重要的管道。文件寫得明明白白了,假如客戶端請求出錯了,就可以先去查看文檔(比如每個錯誤代碼代表了什麼),而不是每次出問題了就來找伺服器的人討論。 PS: 有些 http 請求範例盡量用 curl 寫,而不是 js 中的物件等的方式,也許你看的很懂,但客戶端的人不懂 js。

9.設定檔

在每個工程目錄下都建立一個設定文件,如 config.js/config.json。而不是寫死在程式碼裡。如:

{
  "app": 3000,
  "mongo": {
    "host": "localhost",
    "port": 27017
  },
  "redis": {
    "host": "localhost",
    "port": 6379
  }
  ...
}
10.使用 pm2

使用 pm2 等這種進程管理工具,很方便,最不濟進程掛掉了還能自動重啟吶。沒用過 forever 不做評價。 。還有 grunt 神馬的也沒用過,不做評價。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn