官網(wǎng)https://expressjs.com/
Express框架是后臺(tái)的Node框架
1.安裝express
先創(chuàng)建空目錄番枚,在目錄下執(zhí)行:
npm init
npm install express --save
2. helloworld
在目錄下建立一個(gè)入口文件app.js
執(zhí)行
3.路由
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.get('/haha', function (req, res) {
res.send('哈哈哈');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
get請(qǐng)求
app.get("/",function(req, res) {
});
// 獲得請(qǐng)求參數(shù)
app.get("/student/:id", function(req, res){
let id = req.params["id"];
});
post請(qǐng)求
app.post("/",function(req, res){
});
處理所有請(qǐng)求
app.all("/",function(req, res){
});
路由的時(shí)候支持正則
4.靜態(tài)文件
創(chuàng)建public目錄用于存放靜態(tài)文件
var express = require('express');
var app = express();
//靜態(tài)文件
app.use(express.static("./public"));
5.與模板引擎相結(jié)合
-
首先要在目錄下安裝ejs
-
創(chuàng)建views文件夾法严,新建一個(gè)ejs文件
app.js中注冊(cè)模板引擎
// 使用模板引擎
app.set("view engine", "ejs");
app.get("/yin", function(req, res) {
res.render('index', { title: '有啥新聞呢' });
});
6.中間件
路由get损敷、post這些就是中間件,中間件講究順序深啤,匹配上第一個(gè)之后拗馒,就不會(huì)往后匹配了。next函數(shù)才能繼續(xù)往后匹配墓塌。所以具體的要往上寫瘟忱。
-
app.use()也是一個(gè)中間件,與get苫幢、post不同的是访诱,他的網(wǎng)址不是精確匹配的,而是能夠拓展的
當(dāng)不寫路徑參數(shù)的時(shí)候韩肝,默認(rèn)是“/”
app.use后面的模塊一般是引入的,例如我們使用靜態(tài)服務(wù)時(shí)
app.use(express.static("./public"));
404錯(cuò)誤頁(yè),放到最后触菜,前面都沒(méi)有匹配到路由,就到這里了哀峻。
app.use(function(err, req, res){
res.send("沒(méi)有這個(gè)頁(yè)面涡相!");
});
7.render 和 sender
- 大多數(shù)情況下,渲染內(nèi)容用res.render(),將會(huì)根據(jù)views中的模板進(jìn)行渲染剩蟀,如果不想使用views文件夾催蝗,自己要設(shè)置文件夾的名字,可以使用
var path = require('path');
app.set('views', path.join(__dirname, 'haha'));
- 如果想寫一個(gè)快速測(cè)試頁(yè)育特,可以使用res.send(),這個(gè)函數(shù)根據(jù)內(nèi)容丙号,自動(dòng)幫我們?cè)O(shè)置了Content-Type頭部和200狀態(tài)碼。想使用不同的狀態(tài)碼
res.status(404).send("找不到該頁(yè)面");
res.set(“Content-Type”缰冤,“text/html”);
8.處理GET犬缨、POST請(qǐng)求參數(shù)
-
Get請(qǐng)求的參數(shù)在URL中,在原生Node中需要使用url模塊來(lái)識(shí)別參數(shù)字符串棉浸,在Express中怀薛,直接使用req.query對(duì)象。
- POST請(qǐng)求在express中不能直接獲得迷郑,必須使用body-parser模塊枝恋,使用后,將可以用req.body得到參數(shù)嗡害。但如果表單中含有文件上傳鼓择,那么還是需要使用formidable模塊。
具體使用:https://www.npmjs.com/package/body-parser
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
app.post("/",function(req,res){
console.log(req.body)就漾;
});
app.listen(3000);
9.MVC項(xiàng)目構(gòu)成
在完整的項(xiàng)目目錄下,一般會(huì)使用MVC的方式來(lái)構(gòu)建代碼念搬。
M: model (model層主要是連接數(shù)據(jù)庫(kù)抑堡,或者相后臺(tái)Cgi發(fā)送請(qǐng)求獲取數(shù)據(jù))
V: view (就是頁(yè)面模板摆出,這里是ejs)
C:Controller (調(diào)用module中的方法獲取數(shù)據(jù),進(jìn)行邏輯處理首妖,并填充view)
public:用于放靜態(tài)資源文件
10.express應(yīng)用程序生成器
10.1 應(yīng)用程序生成器能夠快速的構(gòu)建項(xiàng)目代碼偎漫,相當(dāng)于腳手架。
npm install express-generator -g
10.2 在當(dāng)前目錄下創(chuàng)建一個(gè)名為express_dev_2的項(xiàng)目有缆,使用ejs
express --view=ejs express_dev_2
整個(gè)項(xiàng)目目錄結(jié)構(gòu)如下:
進(jìn)入項(xiàng)目象踊,安裝依賴,將tnpm改為npm即可:
運(yùn)行
10.3.Express項(xiàng)目解析
首先看package.json
我們?cè)趩?dòng)項(xiàng)目時(shí)棚壁,執(zhí)行的是npm start,其實(shí)是在執(zhí)行node ./bin/www检碗,這是項(xiàng)目的入口文件漂佩。
在./bin/www文件中,完成了端口號(hào)的設(shè)置,服務(wù)的創(chuàng)建戈轿,端口的監(jiān)聽。
在app.js中引入了路由卡骂,設(shè)置了view及引擎翠忠。
當(dāng)路由輸入/的時(shí)候,會(huì)執(zhí)行到routers/index.js
會(huì)去渲染views/index.ejs,同樣可以看到傳遞了一個(gè)參數(shù){title:‘Express’}
在index.ejs中鬓照,使用<%= title%>拿到傳遞的參數(shù)
10.4.熱更新安裝supervisor
如果我們需要不斷的修改代碼熔酷,希望能夠同步更新,先要安裝supervisor在全局環(huán)境下
tnpm install -g supervisor
然后在項(xiàng)目目錄下豺裆,這樣代碼更新后就能夠及時(shí)更改拒秘。