安裝
epress
, 可以使用npm install express --save
進行安裝,如果使用webStorm
的話,新建一個node
項目,會自動幫你下載express
包。
Paste_Image.png
等你創建好之后就會有一個
node_modules
一個文件夾下就會有express
這個包。
1、路由能力
var express = require("express");
var app = express();
app.get("/",function(req,res){
res.send("你好");
});
app.get("/haha",function(req,res){
res.send("這是haha頁面,哈哈哈哈哈哈");
});
//使用正則匹配學號
app.get(/^\/student\/([\d]{10})$/,function(req,res){
res.send("學生信息,學號" + req.params[0]);
});
app.get("/teacher/:gonghao",function(req,res){
res.send("老師信息,工號" + req.params.gonghao);
});
app.listen(3000);
app.get()
,該方法中有兩個參數,第一個參數為請求路徑,不分大小寫,第二個為回掉函數,請求路徑可以使用正則匹配,app.post()
也是同樣的參數形式。app.listen(3000)
表示監聽3000端口,在瀏覽器輸入localhost:3000
就可以訪問。
正則表達式可以被使用。正則表達式中,未知部分用圓括號分組,然后可以用req.params[0]、[1]
得到,req.params
為類數組對象。
app.get(/^\/student\/([\d]{10})$/,function(req,res){
res.send("學生信息,學號" + req.params[0]);
});
但是用冒號這種方法更好一些:
app.get("/student/:id",function(req,res){
var id = req.params["id"];
// var id = req.params.id;(這種方式也能獲取到id的值)
var reg= /^[\d]{6}$/; //正則驗證
if(reg.test(id)){
res.send(id);
}else{
res.send("請檢查格式");
}
});
2、靜態文件
Express
提供了內置的中間件 express.static
來設置靜態文件如:圖片, CSS, JavaScript
等,你可以使用 express.static
中間件來設置靜態文件路徑。例如,如果你將圖片, CSS, JavaScript
文件放在 public 目錄下,你可以這么寫:
app.use(express.static('public'));
3、中間件
路由get、post
這些東西,就是中間件,中間件講究順序,匹配上第一個之后,就不會往后匹配了。next
函數才能夠繼續往后匹配。如果我的的get、post
回調函數中,沒有next
參數,那么就匹配上第一個路由,就不會往下匹配了。如果想往下匹配的話,那么需要寫next()
.
app.get("/",function(req,res,next){
console.log("1");
next();
});
app.get("/",function(req,res){
console.log("2");
});
app.use()
也是一個中間件。與get、post
不同的是,他的網址不是精確匹配的。而是能夠有小文件夾拓展的。比如網址: http://127.0.0.1:3000/admin/aa/bb/cc/dd
app.use("/admin",function(req,res){
res.write(req.originalUrl + "\n"); // /admin/aa/bb/cc/dd
res.write(req.baseUrl + "\n"); // /admin
res.write(req.path + "\n"); // /aa/bb/cc/dd
res.end("你好");
});
如果只寫一個/
的話,就匹配所有網址
//當你不寫路徑的時候,實際上就相當于"/",就是所有網址
app.use(function(req,res,next){
console.log(new Date());
next();
});
4、內容渲染
- 大多數情況下,渲染內容用
res.render()
,將會根據views
中的模板文件進行渲染。如果不想使用views文件夾,想自己設置文件夾名字,那么app.set("views","aaaa")
; - 如果想寫一個快速測試頁,當然可以使用
res.send()
。這個函數將根據內容,自動幫我們設置了Content-Type
頭部和200狀態碼。send()
只能用一次,和end
一樣。和end
不一樣在哪里?能夠自動設置MIME
類型。 - 如果想使用不同的狀態碼,可以:
res.status(404).send('Sorry, we cannot find that!');
- 如果想使用不同的Content-Type,可以:
res.set('Content-Type', 'text/html');