node.js之express模塊

一海铆、簡(jiǎn)介

Express 是一個(gè)簡(jiǎn)潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強(qiáng)大特性幫助你創(chuàng)建各種 Web 應(yīng)用,和豐富的 HTTP 工具踪少。使用 Express 可以快速地搭建一個(gè)完整功能的網(wǎng)站塘安。

二、安裝與運(yùn)行

終端輸入命令安裝援奢,這與其他模塊一樣

sudo npm install express

運(yùn)行并初始化express

var express = require("express");
var app = express();//初始化

三兼犯、核心功能

路由

引入一下模塊,body-parser是post請(qǐng)求方式封裝的模塊,get請(qǐng)求不可用免都。

var express = require("express");
var app = express();
var querystring = require("querystring");
// 只是post請(qǐng)求方式取參
var bodyParser = require("body-parser");
var app = express();
// 引入bodyParser
app.use(bodyParser.urlencoded({
    extended:true
}));

獲取請(qǐng)求參數(shù)* req.host:返回請(qǐng)求頭里取的主機(jī)名(不含端口號(hào))* req.path:返回請(qǐng)求的url的路徑名* req.query:是一個(gè)可獲取客戶端get請(qǐng)求路徑參數(shù)的對(duì)象屬性,包含著被解析過的請(qǐng)求參數(shù)對(duì)象,默認(rèn)為{}* req.params:獲取路由的parameters

返回參數(shù)

  • res.send();返回?cái)?shù)據(jù),默認(rèn)會(huì)轉(zhuǎn)為字符串,編碼為utf8* res.sendFile();返回文件* res.sendStatus();返回狀態(tài)碼
  1. get請(qǐng)求

app.get(path,cb)锉罐;

  • path:為請(qǐng)求的路徑
  • cb :第二個(gè)參數(shù)為處理函數(shù)的回調(diào),有兩個(gè)參數(shù)request和response,代表請(qǐng)求信息和響應(yīng)信息
  1. 使用res.sendFile()方法加載post提交頁面
  2. 使用res.send()方法傳輸數(shù)據(jù),
    使用express模板比原生的node傳輸方便了很多绕娘,不需要去獲取pathname,判斷pathname的值...,只需要用app.get()就能實(shí)現(xiàn)數(shù)據(jù)交互的功能了脓规。
app.get("/",function (req,res) {
    // res.send("<h1>我是主頁</h1>");
    // 加載post提交頁面
    res.sendFile(__dirname+"/post.html");
})
app.get("/goods",function (req,res) {
    res.send("我是商品頁");
})
  1. post請(qǐng)求
    使用app.post()來處理post請(qǐng)求;
    原生node獲取數(shù)據(jù)的方法险领,用流的方式讀取數(shù)據(jù)侨舆,讀完后獲得數(shù)據(jù),而使用body-parser模板時(shí)绢陌,post傳輸?shù)臄?shù)據(jù)便在req.body中挨下,直接取就可以了,簡(jiǎn)化了讀文檔流的步驟脐湾。body-parser的配置看上面的已經(jīng)配置了臭笆。
app.post("/post",function (req,res) {
// 原生node獲取post參數(shù)的寫法
    // var str = "";
    // req.on("data",function (chunk) {
    //     str += chunk;
    // })
    // req.on("end",function () {
    //     var data = querystring.parse(str);
    //     console.log(data);
    //     res.send(`<h1>姓名是:${data.username}年齡是:${data.age}</h1>`);
    // })

    // 通過body-parser獲取到參數(shù)
    console.log(req.body);
    res.send(`<h1>姓名是:${req.body.username}年齡是:${req.body.age}</h1>`);
});
  1. post或者get請(qǐng)求
    express模板封裝了一個(gè)all方法,來處理不管是任何方式發(fā)送的請(qǐng)求秤掌,*為任意路徑愁铺。
// get請(qǐng)求或者是post請(qǐng)求;
app.all("/*",function (req,res) {
    // console.log(req._parsedUrl.pathname);
    var pathname = req._parsedUrl.pathname;
    if(pathname=="/get"){
        var data = req.query;
        res.send(JSON.stringify(data));
    }else if(pathname!="/favicon.ico"){
        res.sendFile(__dirname+pathname);
    }
});

中間件

中間件的概念如下:


3370BBEBE2AE51896F5DCC856745D002.png

中間件能將數(shù)據(jù)進(jìn)行傳遞闻鉴,使用app.use方法實(shí)現(xiàn)茵乱,參數(shù)next指下一個(gè)中間件。如下面代碼孟岛,money一層一層往下傳瓶竭,每個(gè)中間件都能對(duì)此進(jìn)行操作。

var express = require("express");
var app = express();
// 中間件
app.use(function (req,res,next) {
    // 省政府
    req.money = 100;
    next();
});
app.use(function (req,res,next) {
    // 市政府
    req.money -=20;
    next();
});
app.use(function (req,res,next) {
    // 區(qū)政府
    req.money -= 20;
    next();
});
// 錯(cuò)誤處理中間件
app.use(function (err,req,res,next) {
    if(err){
        console.log(err);
    }
});
app.all("/",function (req,res){
    console.log(req.money);
    res.send(""+req.money);
});
app.listen(7877);

cookie與session

  1. cookie
    安裝cookie-parser模塊
npm install cookie-parser

設(shè)置cookie和獲得cookie
參數(shù):

  • expires:cookie的過期時(shí)間渠羞,GMT格式斤贰。如果沒有指定或者設(shè)置為0,則產(chǎn)生新的cookie堵未。
  • maxAge:是設(shè)置過去時(shí)間的方便選項(xiàng)腋舌,其為過期時(shí)間到當(dāng)前時(shí)間的毫秒值。
var express = require("express");
var cookieParser = require("cookie-parser");
var app = express();
app.use(cookieParser());
// 設(shè)置cookie
app.get("/setcookie",function (req,res) {
    // res.cookie("username","zhangsan",{maxAge:1000*7200});
    var nowTime = new Date();
    nowTime.setDate(nowTime.getDate()+7);
    console.log(nowTime);
    res.cookie("username","zhangsan",{expires:nowTime});
    res.send("設(shè)置cookie");
});
app.get("/getcookie",function (req,res) {
    var username = req.cookies.username;
    res.send(`取到的cookie內(nèi)容是${username}`);
})
app.listen(8788);

瀏覽器cookie:


8A036388E42A7D717BF673884BC6AABE.png
  1. session
    安裝express-session模塊
npm install express-session

session配置:
下面三個(gè)參數(shù)的具體意義:

  • secret:"mysecret",
    一個(gè)String類型的字符串渗蟹,作為服務(wù)器端生成session的簽名
  • resave: false,
    (是否允許)當(dāng)客戶端并行發(fā)送多個(gè)請(qǐng)求時(shí)块饺,其中一個(gè)請(qǐng)求在另一個(gè)請(qǐng)求結(jié)束時(shí)對(duì)session進(jìn)行修改覆蓋并保存
  • saveUninitialized: true,
    初始化session時(shí)是否保存到存儲(chǔ)。默認(rèn)為true雌芽, 但是(后續(xù)版本)有可能默認(rèn)失效授艰,所以最好手動(dòng)添加
var express = require("express");
var session = require("express-session");
var app = express();
app.use(session({
    secret:"mysecret",
    resave:true,
    saveUninitialized:true
}));

session的設(shè)置在瀏覽器中讀取不到,因?yàn)閟ession是存儲(chǔ)在服務(wù)器中的世落。

app.get("/setsession",function (req,res) {
    req.session.username = "litiantian";
    res.send("session設(shè)置成功");
});
app.get("/getsession",function (req,res) {
    var username = req.session.username;
    console.log(req.session);
    res.send("session內(nèi)容是:"+username);
});
app.listen(8989);

結(jié)束

這是express模塊的api網(wǎng)址:https://www.zybuluo.com/XiangZhou/note/208532
需要調(diào)用什么接口淮腾,可以訪問查看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谷朝,隨后出現(xiàn)的幾起案子洲押,更是在濱河造成了極大的恐慌,老刑警劉巖圆凰,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杈帐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡专钉,警方通過查閱死者的電腦和手機(jī)挑童,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跃须,“玉大人站叼,你說我怎么就攤上這事」矫瘢” “怎么了尽楔?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長第练。 經(jīng)常有香客問我翔试,道長,這世上最難降的妖魔是什么复旬? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮冲泥,結(jié)果婚禮上驹碍,老公的妹妹穿的比我還像新娘。我一直安慰自己凡恍,他們只是感情好志秃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嚼酝,像睡著了一般浮还。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闽巩,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天钧舌,我揣著相機(jī)與錄音,去河邊找鬼涎跨。 笑死洼冻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隅很。 我是一名探鬼主播撞牢,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了屋彪?” 一聲冷哼從身側(cè)響起所宰,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畜挥,沒想到半個(gè)月后仔粥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砰嘁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年件炉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矮湘。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斟冕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缅阳,到底是詐尸還是另有隱情磕蛇,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布十办,位于F島的核電站秀撇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏向族。R本人自食惡果不足惜呵燕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望件相。 院中可真熱鬧再扭,春花似錦、人聲如沸夜矗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紊撕。三九已至罢荡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間对扶,已是汗流浹背区赵。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浪南,地道東北人惧笛。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像逞泄,于是被迫代替她去往敵國和親患整。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拜效,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容