Express是服務器的框架,更准確的說:它是一款基於node.js平的開發框架。官網:http://www.expressjs.com.cn/starter/installing.html
類似於它的框架很多,但它可以說是被廣泛應用的第一款服務器開發框架。
express koajs loopback //以上是同一小組開發 不分好壞 根據項目適配 egg //阿里巴巴開發 基於koajs 國內應用比較廣泛
安裝方式分為兩種:
1. npm install 在node.js平台安裝 安裝后系統自動生成package.json文件
2. 直接寫package.json文件在進行npm install安裝
使用方式:
//開啟服務器 並見監聽9000端口 const express = require('express'); let app = express(); //__dirname 打印當前文件路徑-絕對路徑 //同類型__filename 打印當前文件路徑-絕對路徑 包含文件名 app.use(express.static(__dirname + '/public')); app.listen(9000);
Express模塊的get方法--路由 處理以get方式發送且路徑為‘/’的請求
//當且僅當請求為get 方法 且路徑符合時,才會觸發相應的路由--也就是觸發指定路徑的指定方法 var express = require(); var app = express(); app.get('/',function(res,req){ res.send('Hello world!'); }); app.get('/customer',function(res,req){ res.send('customer pase'); }) app.get('/admin',function(){ res.send('admin page'); }); app.listen(3000);
為了頁面更加整潔,可讀性更高,我們會將處理路由的代碼抽離出來:
目錄結構:
routes/
index.js
app.js
routes/index.js function(app){ app.get('/',function(res,req){ req.send('hello world!'); }); app.get('/',function(res,req){ req.send('wo shi guile'); }); app.get('/',function(res,req){ req.send('wssjzw') }); } //app.js const express = require('express'); const routes = require('./routes'); let app = express(); routes(app); app.listen(9000);
運行原理
底層:http模塊
Express框架建立在node.js內置的http模塊上。
var http= require('http'); var app = http.createServer(function(request,response){ response.writeHead(200,{"content-type":"text/plain"}); response.end("Hello world!"); }); app.listen(3000,"localhost");
Express底層調用了http模塊的createServer方法,表示生成一個HTTP服務器實例,該方法參數是一個回調函數,回調函數的兩個參數分別代表HTTP請求的request對象和HTTP響應的response對象。
const express = require('express'); let app = express(); app.get('/',function(req,res){ res.send('Hello world!'); }); app.listen(3000);
這樣書寫相比於原生的好處是: 減少了代碼耦合度(代碼與代碼的依賴度)。方便后續修改。
Express模塊的get方法--路由 處理以post方式發送且路徑為‘/’的請求
//對網站首頁的訪問返回 "Hello World!"字樣 app.get('/',function(){ res.send('Hello World'); }); //網站首頁接受POST請求 app.post('/',function(res,req){ res.send('Got a POST request'); });
利用Express托管靜態文件
通過Express內置的Express.static可以方便地托管靜態文件,例如圖片、CSS、Javascript文件等。
將靜態資源文件所在目錄作為參數傳遞給express.static中間鍵就可以提供靜態資源文件的訪問。例如,假設在public目錄放置了圖片、CSS和Javascript文件,你就可以:
app.use(express.static('public'));
現在,public目錄下面的文件就可以訪問了。
http://localhost:3000/images/kitten.jpg http://localhost:3000/css/style.css http://localhost:3000/js/app.js http://localhost:3000/images/bg.png http://localhost:3000/hello.html
所有文件的路徑都是相對存放目錄的,因此,存放靜態文件的目錄名不會出現在URL中。
如果你的靜態資源存放在多個目錄下面,你可以多次調用express.static中間件:
app.use(express.static('public'));
app.use(express.static('files'));
訪問靜態資源文件時,express.static文件件會根據目錄添加的順序查找所需的文件。
如果你希望所通過express.static訪問的文件都存放在一個‘虛擬(virtual)’目錄(即目錄根本不存在)下面,可以通過為靜態資源目錄指定一個掛載路徑的方式來實現,如下所示:
app.use('/static',express.static('public'));
現在你就可以通過帶有“/static”前綴的地址來訪問public目錄下面的文件了。
http://localhost:3000/static/images/kitten.jpg http://localhost:3000/static/css/style.css http://localhost:3000/static/js/app.js http://localhost:3000/static/images/bg.png http://localhost:3000/static/hello.html