安裝
epress
, 可以使用npm install express --save
進行安裝,如果使用webStorm
的話狸演,新建一個node
項目匠襟,會自動幫你下載express
包庇勃。
等你創(chuàng)建好之后就會有一個
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頁面,哈哈哈哈哈哈");
});
//使用正則匹配學(xué)號
app.get(/^\/student\/([\d]{10})$/,function(req,res){
res.send("學(xué)生信息呼畸,學(xué)號" + req.params[0]);
});
app.get("/teacher/:gonghao",function(req,res){
res.send("老師信息痕支,工號" + req.params.gonghao);
});
app.listen(3000);
app.get()
,該方法中有兩個參數(shù),第一個參數(shù)為請求路徑蛮原,不分大小寫采转,第二個為回掉函數(shù),請求路徑可以使用正則匹配瞬痘,app.post()
也是同樣的參數(shù)形式故慈。app.listen(3000)
表示監(jiān)聽3000端口,在瀏覽器輸入localhost:3000
就可以訪問框全。
正則表達式可以被使用察绷。正則表達式中,未知部分用圓括號分組津辩,然后可以用req.params[0]拆撼、[1]
得到,req.params
為類數(shù)組對象喘沿。
app.get(/^\/student\/([\d]{10})$/,function(req,res){
res.send("學(xué)生信息闸度,學(xué)號" + 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、靜態(tài)文件
Express
提供了內(nèi)置的中間件 express.static
來設(shè)置靜態(tài)文件如:圖片蚜印, CSS, JavaScript
等莺禁,你可以使用 express.static
中間件來設(shè)置靜態(tài)文件路徑。例如窄赋,如果你將圖片哟冬, CSS, JavaScript
文件放在 public 目錄下,你可以這么寫:
app.use(express.static('public'));
3忆绰、中間件
路由get浩峡、post
這些東西,就是中間件错敢,中間件講究順序翰灾,匹配上第一個之后,就不會往后匹配了稚茅。next
函數(shù)才能夠繼續(xù)往后匹配纸淮。如果我的的get、post
回調(diào)函數(shù)中峰锁,沒有next
參數(shù)萎馅,那么就匹配上第一個路由,就不會往下匹配了虹蒋。如果想往下匹配的話糜芳,那么需要寫next()
.
app.get("/",function(req,res,next){
console.log("1");
next();
});
app.get("/",function(req,res){
console.log("2");
});
app.use()
也是一個中間件。與get魄衅、post
不同的是峭竣,他的網(wǎng)址不是精確匹配的。而是能夠有小文件夾拓展的晃虫。比如網(wǎng)址: 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("你好");
});
如果只寫一個/
的話皆撩,就匹配所有網(wǎng)址
//當你不寫路徑的時候,實際上就相當于"/"哲银,就是所有網(wǎng)址
app.use(function(req,res,next){
console.log(new Date());
next();
});
4扛吞、內(nèi)容渲染
- 大多數(shù)情況下,渲染內(nèi)容用
res.render()
荆责,將會根據(jù)views
中的模板文件進行渲染滥比。如果不想使用views文件夾,想自己設(shè)置文件夾名字做院,那么app.set("views","aaaa")
; - 如果想寫一個快速測試頁盲泛,當然可以使用
res.send()
。這個函數(shù)將根據(jù)內(nèi)容键耕,自動幫我們設(shè)置了Content-Type
頭部和200狀態(tài)碼寺滚。send()
只能用一次,和end
一樣屈雄。和end
不一樣在哪里村视?能夠自動設(shè)置MIME
類型。 - 如果想使用不同的狀態(tài)碼酒奶,可以:
res.status(404).send('Sorry, we cannot find that!');
- 如果想使用不同的Content-Type蓖议,可以:
res.set('Content-Type', 'text/html');