針對不同的請求,Express提供了use方法的一些別名。比如,上面代碼也可以用別名的形式來寫。
~~~
var express = require("express");
var http = require("http");
var app = express();
app.all("*", function(request, response, next) {
response.writeHead(200, { "Content-Type": "text/plain" });
next();
});
app.get("/", function(request, response) {
response.end("Welcome to the homepage!");
});
app.get("/about", function(request, response) {
response.end("Welcome to the about page!");
});
app.get("*", function(request, response) {
response.end("404!");
});
http.createServer(app).listen(1337);
~~~
上面代碼的all方法表示,所有請求都必須通過該中間件,參數中的“*”表示對所有路徑有效。get方法則是只有GET動詞的HTTP請求通過該中間件,它的第一個參數是請求的路徑。由于get方法的回調函數沒有調用next方法,所以只要有一個中間件被調用了,后面的中間件就不會再被調用了。
除了get方法以外,Express還提供post、put、delete方法,即HTTP動詞都是Express的方法。
這些方法的第一個參數,都是請求的路徑。除了絕對匹配以外,Express允許模式匹配。
~~~
app.get("/hello/:who", function(req, res) {
res.end("Hello, " + req.params.who + ".");
});
~~~
上面代碼將匹配“/hello/alice”網址,網址中的alice將被捕獲,作為req.params.who屬性的值。需要注意的是,捕獲后需要對網址進行檢查,過濾不安全字符,上面的寫法只是為了演示,生產中不應這樣直接使用用戶提供的值。
如果在模式參數后面加上問號,表示該參數可選。
~~~
app.get('/hello/:who?',function(req,res) {
if(req.params.id) {
res.end("Hello, " + req.params.who + ".");
}
else {
res.send("Hello, Guest.");
}
});
~~~
下面是一些更復雜的模式匹配的例子。
~~~
app.get('/forum/:fid/thread/:tid', middleware)
// 匹配/commits/71dbb9c
// 或/commits/71dbb9c..4c084f9這樣的git格式的網址
app.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){
var from = req.params[0];
var to = req.params[1] || 'HEAD';
res.send('commit range ' + from + '..' + to);
});
~~~
- 1. 概述
- 1.1 搭建HTTPs服務器
- 2. 運行原理
- 2.1 底層:http模塊
- 2.2 對http模塊的再包裝
- 2.3 什么是中間件
- 2.4 use方法
- 3. Express的方法
- 3.1 all方法和HTTP動詞方法
- 3.2 set方法
- 3.3 response對象
- 3.4 requst對象
- 4. 項目開發實例
- 4.1 編寫啟動腳本
- 4.2 配置路由
- 4.3 靜態網頁模板
- 5. 動態網頁模板
- 5.1 安裝模板引擎
- 5.2 新建數據腳本
- 5.3 新建網頁模板
- 5.4 渲染模板
- 5.5 指定靜態文件目錄
- 6. ExpressJS 4.0的Router用法
- 6.1 基本用法
- 6.2 router.route方法
- 6.3 router中間件
- 6.4 對路徑參數的處理
- 7. 上傳文件
- 8. 參考鏈接