NodeJS學習筆記(一)

來源:互聯網
上載者:User

標籤:style   http   ar   io   os   使用   sp   java   on   

    最近公司要啟動一個移動項目,在後台系統的選型上,可選的有PHP、Java、NodeJS,從技術上來說,Java較為成熟,但開發速度較慢,效能穩定;PHP開發迅速,但穩定性不高,效能也一般,開發效率較高;NodeJS的效能較高,可以處理更多的串連和iO問題,所以最終選擇了NodeJS。   NodeJS本質來說是一個伺服器端的Javascript,但是其使用起來,並不是那麼容易,我大致的學習過程如下,我買了兩本書,一本是樸靈的《深入淺出NodeJS》,一本是趙坤等的《Node.JS實戰》,相對來說,前者對我的影響更大,讓我對NodeJs有了一個直觀的瞭解,樸靈的介紹偏向底層,對架構性的極少較少,後來我就買了第二本書,但是只是大致翻了一下,坦白來說,我之前對NodeJS的瞭解等於零,對JQuery也只有粗淺的研究,所以遇到了很多困難。最後我清理了一下思路,選擇Sails MVC架構。   我要解決的問題也很簡單,需要為移動APP提供後台支援,需要提供HTTP服務,支援MySQL資料庫,以及其他的快取資料庫,並要和PHP架構Laravel開發的WEB程式互連,第一個問題就是需要能夠採用同樣的密碼編譯演算法對密碼加密和比對。這些問題下面會以此解決。   NodeJS的安裝比較簡單,在nodejs.org上下載對應作業系統的包即可,目前的版本是0.10.31,Windows和Mac平台可以直接安裝,Linux平台需要自己編譯,編譯過程很簡單,依次運行./configure,make,sudo make install即可,現在的NodeJS預設會安裝NPM,就是NodeJS的包管理工具,大部分的模組都可以通過這個工具安裝。  常見的Nodejs資源是nodejs.org和github.com,前者包含官方文檔,後者可以搜尋到一些你需要的包,雖然大部分的包網上都能找到教程,但是教程很容易過時,最好看看github.com上的對應的說明,或者下載安裝模組後,看模組目錄下的README.Md,可以知道一些基本的用法,避免在起始配置上花費過多的時間。  在尋找模組時,可以看看其評價,尋找評價較好的模組,因為nodejs的模組實在太多了。  開發nodejs時,我知道的工具有nodeclipse、Netbeans、WebStorm,相對來說,WebStorm較好,不過需要錢,nodeclipse也不錯,只不過感覺不穩定,Netbeans增加一個外掛程式就可以了,但是沒有調試功能,只是一個運行命令而已,好在它的編輯功能很強大。其他的sublime和notepad++都可以用,最終我用的還是Netbeans,因為可以和PHP、Java程式公用一個環境,Eclipse有點太大了,最近不怎麼喜歡了。  nodejs的程式其他的程式如PHP、Java有很大的不同,如果它有的地方出錯了,整個系統就崩潰了,但PHP和Java都不會,他們只會在出錯的地方出錯,其他的地方正常運行。因為nodejs本質來說,其主體線程只有一個,崩潰了就沒有了。所以要特別小心,但是也有其優點,訪問全域變數要容易的多,比如Sessioin、緩衝等。不過同樣需要注意其記憶體配置問題,全域變數可能會永遠存在,容易造成記憶體流失問題。   安裝nodejs模組的命令式npm install module_name,這會在目前的目錄下建立一個node_modules,裡面是包含的模組,如果要安裝全域模組,需要用npm install module_name -g,這會在主目錄下建立node_modules,裡面儲存包含的模組。模組名可以在命令中指定,也可以在目前的目錄下的package.json中指定。下面以express為例說明一下。   學習nodejs常見的組件是express,這是一個簡單的提供http服務的mvc架構,類似於PHP的laravel,或者Java的Spring,當然其功能要弱一些,安裝命令為npm install -g express,然後用express命令安裝,有以下幾種情況:   express #在目前的目錄下建立express架構,預設使用jade引擎   express -e #在目前的目錄下建立express架構,預設使用ejs引擎
   express project#在project目錄下建立express架構,預設使用jade引擎    express -e project#在project目錄下建立express架構,預設使用ejs引擎   express --version #顯示目前的版本   也可以用express -h,查看所有的協助資訊  目前的express的版本為4.9.0,在4.0之後,預設的express架構不再整合常見的connect模組,詳細的connect資訊可以參考https://github.com/senchalabs/connect,比如想要增加session支援,可以參考頁面上的express-session模組。  預設的頁面渲染引擎有兩種: jade和ejs,ejs類似於php的方式將js指令碼嵌入到html代碼中,雖然看起來比較亂,但是習慣了也沒什麼,jade有點難以理解,不太適應,好像效率也不高,就選擇了ejs引擎。  預設的package.json如下{  "name": "test",  "version": "0.0.0",  "private": true,  "scripts": {    "start": "node ./bin/www"  },  "dependencies": {    "express": "~4.9.0",    "body-parser": "~1.8.1",    "cookie-parser": "~1.3.3",    "morgan": "~1.3.0",    "serve-favicon": "~2.1.3",    "debug": "~2.0.0",    "ejs": "~0.8.5"  }}在運行完express -e命令之後,系統會提示你到目錄中運行npm install命令,這個命令會根據package.json的dpendencies的屬性下載模組安裝。如需要增加session支援,可以運行npm install express-session,也可以在package.json的dependencies增加一行,如下  "dependencies": {    "express": "~4.9.0",    "body-parser": "~1.8.1",    "cookie-parser": "~1.3.3",    "morgan": "~1.3.0",    "serve-favicon": "~2.1.3",    "debug": "~2.0.0",    "ejs": "~0.8.5",    "express-session":"*"  }然後運行npm install命令就可以了。運行express的命令如下:  node ./bin/www就是在根目錄下的bin目錄下的www檔案,這是一個js檔案,運行之後,就可以在瀏覽器中查看運行結果,預設的首頁為http://localhost:3000,express架構的目錄也很清楚,大致如下D:.│  app.js                              #主要的入口檔案,或者說起始檔案│  package.json                   #模組設定檔│├─bin│      www                           #開機檔案:命令為 node www│├─public                             #一些靜態檔案,片、JS、CSS檔案│  ├─images│  ├─javascripts│  └─stylesheets│          style.css│├─routes                     #路由檔案,目前express支援將將一個虛擬目錄下的請求放到要給路由檔案中,這是在app.js中定義的│      index.js                #app.use(‘/‘,routes)  ->根目錄下的路由  │      users.js                #app.use(‘/user‘,users)  ->user目錄下的路由│└─views                      #mvc的view層,目前都為ejs檔案        error.ejs        index.ejs不過目前來說,express不支援控制器,其邏輯常常要寫在routes檔案中,不過可以將邏輯放在其他檔案中,然後require進來。預設的路由檔案index.js如下:var express = require(‘express‘);var router = express.Router(); /* GET home page. */router.get(‘/‘, function(req, res) {  res.render(‘index‘, { title: ‘Express‘ });}); module.exports = router;這個也非常容易理解,這裡只有一個針對根目錄的路由,是以get方式訪問的,對應的函數有兩個參數,req和res,分為為輸入對象和輸出對象。具體的api說明可以訪問主站頁面:http://expressjs.com/4x/api.html,下面做個簡單的概括1)req    req.params.name    ->/user/:name    req.query.name      ->/user?name=shiyq    req.body.name       ->名稱為name的表單輸入值    req.param(name)    ->以上的三種輸入都支援,次序為params,body,query    req.cookie.name     ->cookie的name屬性2)res    res.cookie(name,value)   ->設定cookie    res.redirect(‘/foo/bar‘)    ->跳轉到/foo/bar    res.location(‘foo/bar‘)     ->類似redirect    res.send(‘<p>name</p>‘)  ->向瀏覽器輸出    res.json()                            ->想瀏覽器返回json資料    res.render(view, [locals], callback)  ->轉向view,並攜帶變數    res.end()                            ->結束輸出讓express支援session,需要安裝express-session模組,查看相應模組下的README.Md檔案,可以看到如下內容var express = require(‘express‘)var session = require(‘express-session‘) var app = express() app.use(session({  secret: ‘keyboard cat‘,  resave: false,  saveUninitialized: true }))    可知這個express-session需要緊跟express的定義,其使用方式是app.use(),如果位置太靠後,可能會出現問題,需要注意,其預設使用方式為req.session.name,預設的express-session將session儲存在記憶體中,如果想儲存到redis,memcache以及mongodb,需要整合另外的組件,可以在github.com上尋找,同時要記得閱讀README.Md檔案    到此為止,就可以進行基本的express開發了,但是很容易發現修改了代碼之後,系統並不生效,nodejs沒有所謂的暖開機機制,需要重新啟動程式,不過每次啟動就太麻煩了,所以要使用自動啟動的工具,supervisor,安裝方式為npm install supervisor -g,執行命令為supervisor app.js,可以用supervisor -h查看協助,一般來說需要設定-w或者-i開關,-w代表監控的目錄,只有這些目錄下的檔案修改了才會重新啟動node,預設為目前的目錄“.”,目錄以“,”間隔,-i是忽略某些目錄。-w開關非常有用,比如某些程式會在目前的目錄下建立臨時檔案,就會不停的重啟,需要設定只有某些目錄修改才需要啟動,如sails架構,其目錄結構如下NodeJS學習筆記(一)這裡明顯有個臨時檔案.tmp,如果直接運行supervisor app.js,就會出現不停重啟的現象,所以我在根目錄下寫了一個sailsjs.bat檔案,內容為    supervisor -w api,assets,config,node_modules,tasks app.js這就可以解決不停重啟的問題了。       

NodeJS學習筆記(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.