Express4 啟航指南


   確實有感而發,Nodejs真的發展太快了,這么說的原因有兩點:自己去年冬天買了本《了不起的Node.js》,里面介紹Express的版本還是2.x.x;前些天小伙伴買了本《Node.js實戰》,結果依賴的Express是3.x.x。尼瑪如果安裝目前新版的Express4,那么這些書中的例子連項目都無法正常跑起來。

  Nodejs相關的紙版書一上市就已經過時了!

  

 

  此文的背景是由於俺某天手欠,升級了最新Express V4+后,發現項目不可用了(還好是公司內部的小工具),查找資料后整理了些許總結,介紹如何使用Express4搭建項目。 

  情況差不多就是這樣,那么咱們"深入淺出"一把Express項目吧。

 

  

 

  如果看官想了解Express 4之前的安裝、使用可查看:http://www.cnblogs.com/Darren_code/p/node_express.html

 

--------------------------- 分割線 ---------------------------

 

目錄

  1. 建立工程環境
  2. npm安裝細節
  3. 全局模式安裝的意義
  4. 創建項目
  5. 目錄結構

 

建立工程環境

  先介紹下各種環境吧:

   

 

  進入俺們的項目所在目錄:

  cd /home/work/node/project

 

  npm安裝express , -g 指令讓express進入全局安裝:

  $ npm install -g express

 

  如果是express 4.0之前版本,那么執行“express -V”就可以得到版本號了,可express 4.0之后還需要再安裝express-generator包,如果沒有安裝還執行“express -V”命令會報錯。

 

  執行安裝express-generator包:

  $ npm install -g express-generator

 

  現在執行“$ express -V”可查看express版本信息了。

  

 

  發生這種情況的原因是,express4.0之后把創建一個APP的功能分離出來為express-generator,沒它你創建不了應用程序。

 

 

NPM和模塊

  以下兩張express目錄(安裝samba,Windows下查看無壓力)的圖片可以更直觀的對比express包的變化,下圖左側是V3.15.0,下圖右側是V4.7.0:

   

 

  目錄結構上看就缺少一個bin文件,這個bin目錄內存放的就是內部命令(下圖),只不過它們都是以獨立的文件形式存在的。

  PS:bin是binary的縮寫,有關bin和sbin目錄的含義需要看官對linux的目錄結構有一點點了解,使用Google 百度一下"linux 目錄"即可找到對應資料。

  

 

  再從模塊信息(node_modules/express/package.json)看它們的重要不同:

  "bin": {    "express": "./bin/express"   }

 

  需要注意npm模塊中的信息都在package.json里面,包括各種配置信息。

  其中"bin"這個key就是申明用戶可以使用“command-name”這個命令,而輸入該命令后就會去執行“command-file”這個文件。如下:

  {    ...    "bin": {    "command-name” : “command-file”
    }    ...   }

 

  所以在命令行輸入express命令時,其實對應的其實是去執行bin目錄下的express程序。

  如果自己要制作模塊包,且希望可以命令行工具使用時,需要配置好bin字段,當全局模式安裝之后就可以在命令行直接執行使用。有關package.json的信息會再配置章節中再詳細介紹,"$ npm help json"可以獲取官方的詳細信息。

 


全局模式安裝的意義

  npm安裝的時候區分本地模式安裝和全局模式安裝,“-g”就表示全局模式安裝,這種模式會被安裝在node安裝目錄的lib所在目錄的node_modules文件夾中,全局使用。

 

  NPM是由Isaac Z.Schlueter創建的,提供給Node服務的Node包管理器,最開始需要獨立安裝,后來當Nodev0.6.3版本默認集成了NPM作為Node包管理器,所以在那之后,只要使用NPM安裝的全局包地址,都可以推算出來。

  如Node在/usr/local/bin/node,那么模塊目錄就是/usr/local/lib/node_modules/下。

  非全局那么就是本地模式安裝,這類模式安裝會被安裝在當前目錄的node_modules文件夾中,非全局使用。

 

  如果express-generator不是全局模式安裝怎么辦?

  非常不爽的就是命令行工具中直接使用"express [option] [dir]"就沒法完成了,只能手動的找到執行文件執行才可以,如本地模式安裝的時只能只能在當前目錄下執行

  $ ./node_modules/express-generator/bin/express -V   4.2.0

 

創建項目

  東扯西扯完畢,各方面也已經Ready,創建個Express項目開心一下:)

  再確認一下所在的目錄位置

  

 

  express myapp

  

  $ cd myapp && npm install

 

  npm install完成之后就可以run起來咯,執行:

  $ DEBUG=myapp ./bin/www

 

  執行“npm start”其效果一樣,下圖分別是這兩條語句執行情況:

  

  

  PS:紅框中的內容是訪問時打印的信息。

   

  可以看到倆條命令打印出來的信息有一行不一樣,執行完“DEBUG=myapp ./bin/www”后會打印出:“myapp Express server listening on port 8898 +0ms”

 

  讓俺們來看看為神馬,執行命令:

  $ vi ./bin/www

  

  PS:默認PORT其實3000(紅框中的部分),俺手動修改后使用的是8898端口

 

  Express4中引入了著名的debug模塊,所以debug模式讓我們更方便的玩轉Node中的模塊,其使用方法介紹起來較長,建議大家看看其官方的介紹:https://www.npmjs.org/package/debug

 

  重要的package.json文件馬上會介紹,創建Express4項目俺們就說到這里。

 

目錄結構

   了解目錄結構是玩轉一切項目的第一步:

  

  • app.js,程序啟動文件
  • bin,創建項目時已經提到,是真實的執行程序
  • node_modules, 存放所有的項目依賴庫
  • package.json,項目依賴配置及開發者信息
  • public,靜態文件(css,js,img)
  • routes,路由文件
  • views,頁面文件

 

配置文件之神奇的package.json

  在Nodejs項目中,package.json文件用來聲明項目基本信息和使用的模塊,這樣在新的環境部署時,只要在package.json文件所在的目錄執行npm install命令即可按照所需要的模塊啦。

  下面俺們通過這個package.json文件再Build Express項目玩玩(生命不息折騰不止嘛)。

 

  回到project目錄:

  

  在project目錄下新加testpackage項目

  $ mkdir testpackage && cd testpackage

  

  把myapp中的package.json copy過來

  $ cp ../myapp/package.json ./

  

  創建個server.js,寫入簡單的幾行代碼,運行一把:

  var express =  require('express');                                                                      
  var app = express();                                                                                  
  app.get('/', function(req, res){                                                                      
      res.send('Hello World');                                                                          
  });                                                                                                   
  var server = app.listen(8808, function() {                                                            
      console.log('Listening on port %d', server.address().port);                                       
  }); 
  app.get('/sayhi', function(req, res){                                                                                                                                       
     res.send('狗狗 黑喂狗');                                                                          
  }); 

 

   

  上面倆圖就是運行結果。

 

  查看package.json中的內容如下

  

  會議下由package.json實現的快速項目搭建,俺們再來了解其內容意義:

  • name
    ~ 在package.json中最重要的就是name和version字段。他們都是必須的,如果沒有就無法install;
    ~ 想好名字之前先去npm registry查看一下這個名字是否已經被使用了,http://registry.npmjs.org/
  • version
    ~ version必須能被 node-semver解析,它被包在npm的依賴中;
    ~ name和version一起組成的標識在假設中是唯一的。改變包應該同時改變version
  • private
    ~ 如果你設置"private": true,npm就不會發布它;
    ~ 這是一個防止意外發布私有庫的方式。如果你要確定給定的包是只發布在特定registry(如內部registry)的,用publishConfighash的描述來重寫registry的publish-time配置參數
  • scripts
    ~ “scripts”是一個由腳本命令組成的hash對象,他們在包不同的生命周期中被執行。key是生命周期事件,value是要運行的命令。
  • dependencies
    ~ 依賴是給一組包名指定版本范圍的一個hash。這個版本范圍是一個由一個或多個空格分隔的字符串。依賴還可以用tarball或者git URL

  以上五項僅僅是Express4 package.json使用的,其他細節可參考文檔 傳送門https://www.npmjs.org/doc/files/package.json.html

 

小結一下

  文章在偏應用的層面上介紹了NPM和模塊信息,希望能對大家了解有所幫忙吧。

  8月份的文章補上,俺們下一章再來介紹用Express+mongodb搭建個人網站,保佑老子千萬別跳票了...吼吼:)

  

 

  資料

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM