Express是目前最流行的基於Node.js的Web開發框架,能夠快速的搭建一個完整功能的網站。
Express框架創建在內置的http模塊上,http模塊生成服務器的原始代碼以下。javascript
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");
上面代碼的關鍵是http模塊的createServer方法,表示生成一個HTTP服務器實例。該方法接受一個回調函數,該回調函數的參數,分別爲表明HTTP請求和HTTP迴應的request對象和response對象。
Express框架的核心是對http模塊的再包裝。上面的代碼用Express改寫以下。css
var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello world!'); }); app.listen(3000);
比較兩段代碼,能夠看到它們很是接近。原來是用http.createServer方法新建一個app實例,如今則是用Express的構造方法,生成一個Epress實例。二者的回調函數都是相同的。Express框架等於在http模塊之上,加了一箇中間層。html
app demo
|---node_modules------用於安裝本地模塊。
|---public------------用於存放用戶能夠下載到的文件,好比圖片、腳本、樣式表等。
|---routes------------用於存放路由文件。
|---views-------------用於存放網頁的模板。
|---app.js------------應用程序的啓動腳本。
|---package.json------項目的配置文件。java
//app.js文件 var express = require('express'); var app = express(); //指定更目錄顯示的內容 app.get('/', function(req, res){ res.send('Hello World'); }); //指定監聽端口 var server = app.listen(3000, function() { console.log('Listening on port %d', server.address().port); });
運行nodejs應用程序node
/>node app.js
中間件(middleware)就是處理HTTP請求的函數.
當一個HTTP請求進入服務器,服務器實例會調用第一個中間件,完成後根據設置,決定是否再調用下一個中間件.express
中間件的參數爲:
.四個的時候---第一個爲錯誤處理,第二個爲客戶請求request,第三個爲服務器響應respond,第四個爲next中間件. 如function(error, request, response, next){}
.三個的時候---第一個客戶請求request,第二個爲服務器響應respond,第三個爲next中間件. 如function(request, response, next){}
.兩個的時候---第一個客戶請求request,第二個爲服務器響應respondfunction. 如function(request, response){}
json
use是express調用中間件的方法,它返回一個函數.bootstrap
app.use(function(request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); response.end("Hello world!\n"); });
app.use(express.bodyParser());//使用body參數 app.use(express.methodOverride());//使用函數覆蓋 app.use(app.router);//使用路由 app.use(function(err, req, res, next){ console.error(err.stack); res.send(500, 'Something broke!'); });//錯誤內容顯示
express路由的方式有多種,這裏舉例經常使用的幾種:瀏覽器
.app.use('/', middleware);//get/post時,對於路徑/的處理 .app.get("/", middleware);//http中get時,對於路徑/的處理 .app.post("/", middleware);//http中post時,對於路徑/的處理 .app.put("/", middleware);//http中put時,對於路徑/的處理 .app.delete("/", middleware);//http中delete時,對於路徑/的處理
.*表示全部路徑 app.get("*", function(request, response) { response.end("404!"); });//全部路徑都返回404 .:捕獲路徑內容 app.get("/hello/:who", function(req, res) { res.end("Hello, " + req.params.who + "."); });//如"/hello/alice」網址,網址中的alice將被捕獲,做爲req.params.who屬性的值
set用於指定變量的值.服務器
app.set("view engine", "ejs");//使用ejs做爲模版
.重定向redirect
response.redirect("/hello/anime");//重定向到/hello/anime
.發送文件sendFile
response.sendFile("/path/to/anime.mp4");
.渲染網頁模板render,即把變換的內容加載到網頁.
response.render("index", { message: "Hello World" });//將message變量傳入index模板,值爲"Hello World"渲染成HTML網頁
.獲取客戶ip地址:request.ip
.獲取上傳的文件:request.files
package.json用於指定app信息,nodejs版本號和其餘組件的依賴關係
{ "name": "demo", "description": "My First Express App", "version": "0.0.1", "dependencies": { "express": "3.x" } }
app.js主要包含http的建立,基本路由,監聽端口號
views文件夾,用於存放全部的放網頁模板.
//app.js app.get('/', function(req, res) { res.render('index',{title:"最近文章"}); }); //index.js this is <%=title%>!
//app.js app.use(express.static('public'));//指定靜態網頁目錄,當瀏覽器發出非HTML文件請求時,服務器端就到public目錄尋找這個文件
如:<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">
, 服務器端就到public/bootstrap/css/目錄中尋找bootstrap.css文件