node.js作後端的使用總結

當前一個web portal項目,我用node.js寫就,大概有2個月了,後面還會繼續迭代開發。總結一些心得。javascript

  • 多數團隊仍是主要用node.js的npm做爲工具倉庫,用node.js自己作核心業務支撐的比較少。確實npm發展的愈來愈好,早已超過cpan成爲第一大open source repository了
  • node.js的門檻。這個主要仍是看對js的興趣,寫慣js的固然怎麼都順眼,而多年C++的人看到弱類型變量就彆扭。就node.js自己,若是不是探尋底層eventlib之類架構的話,js基礎知識確定夠用了。標準Ecmascript就行,ES6不是所有都支持
  • node.js的便利性。其實說白了就是npm的便利性,這個簡直是機器貓的四維兜,要什麼伸手就行。時間處理,安全鏈接,異步任務,數據庫操做,web爬蟲,定時調度什麼的,真是應有盡有。並且不少應用服務商提供的api接口,都有node版本,或者說java,python,node三接口已是標配了,缺一個就缺了一大塊火熱用戶羣。例子就不少了,好比amazon aws,統一支付網管ping++等等。並且現有的成熟js庫均可以直接使用,好比underscore,moment
  • 框架選擇。相比java的spring/play,c++的STL,php的thinkphp,python的django/tronado,甚至perl古董級的catalyst,它們要麼一統天下,要麼多年就一兩個,node簡直就得了選擇困難症。各類框架,前端後臺,我感受一個月出一個也不爲誇張。不說angular/vue/react/backbone等面向移動端的,就後端來講除了經典的express.js,還有koa.js爲表明的各類後起之秀。最近阿里也開源了一個egg.js。用什麼框架,第一要看是否有人維護,是否長期和穩定。還要從用戶熱度(其實也能夠說是google結果量),文檔難度,插件和擴展各方面考慮。過於小衆的,github上可能久不更新,最新issue都是陳年的。若是團隊裏新手較多或者業務比較重要,仍是建議以exress.js入手。經典,用戶基礎大,出了異常有的搜,這有點兒像mysql,久經考驗
  • 性能問題。關於單線程的javascript可否支撐QPS等吞吐,這個網上有各類壓力測試。請根據實際環境自行mock測試,不要貿然上線。個人這個項目,因爲是內部用戶使用,因此不存在性能問題,node的eventloop機制能夠很好的支撐併發請求

前面說了一些泛泛而談的,就express.js來講,我還有如下具體建議:php

  • 若是拿spring來類比,express彷佛不是那種DI/IOC容器,須要自行require模塊,這個也是ecmascript標準。至於AOP就很簡單了,app.js裏有各類中間件,其實就是自定義的函數,好比攔截登陸作分析等等,比spring還簡單
  • 能夠作先後端分離,也能夠大包大攬。若是是後者,那麼須要選擇page template。我選擇的是默認的jade(如今叫pug),由於我寫慣python了因此對縮進很喜歡。若是想要更原生html的能夠選擇其餘如EJS。前端框架用的是JADE-Bootstrap,一個印度大叔寫的,github上回應了我一次issue,問了下狀況,後來就沒touch了
  • 數據庫,咱們的數據源是aws redshift,相似於postgre,因此採用了pg-promise,很好的異步模式
  • 信息提示,用的默認的connect-flash,這個在作一些錯誤提示上仍是很好用的
  • 循環日誌能夠用file-stream-rotator

個人pakage.json以下html

{
  "name": "某個項目",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.15.2",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "express": "~4.14.0",
    "jade": "~1.11.0",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0",
    "pg": "latest",
    "express-session": "latest",
    "express-validator":"latest",
    "connect-flash": "latest",
    "jade-bootstrap": "latest",
    "promise": "~6.1.0",
    "pg-promise": "latest",
    "express-logger": "latest",
    "file-stream-rotator": "latest",
    "util": "latest",
    "string-format": "latest",
    "bluebird": "latest",
    "date-and-time": "latest",
    "underscore": "latest",
    "underscore.string": "latest",
    "request": "latest",
    "node-schedule": "latest"
  }
}
相關文章
相關標籤/搜索