express node.js express

安裝:

新版本中命令行工具分家了

npm install-g express//安裝 express

然后

npm install-g express-generator//安裝 express 命令行工具

express -V

我現(xiàn)在查看到的版本是 4.9.0

npm start? 代替? node app.js? 啟動

http.Server

var http = require(‘http’);

var server = http.createServer(callback); 返回一個http.Server實例

屬性:

server.maxHeadersCount? ? 最大請求頭數(shù)目限制, 默認(rèn) 1000 個. 如果設(shè)置為0, 則代表不做任何限制

方法:

server.listnen(prot)? ? ? ? ? ? 監(jiān)聽一個端口

server.close(callback)? ? ? ? ? 禁止服務(wù)端接收新的連接

server.setTimeout(msecs_Time, callback) 設(shè)置套接字的超時值

事件:

‘request’ 每收到一個HTTP請求時觸發(fā), http.createServer的參數(shù)默認(rèn)就是此事件的處理程序. 提供2個參數(shù): req, res 分別是http.ServerRequest 和 http.ServerResponse 的實例. 表示請求和響應(yīng)消息

‘connection’ 新的TCP建立時觸發(fā). 提供1個 socket 參數(shù) net.Socket 實例

‘close’ 服務(wù)器關(guān)閉時觸發(fā) 無參

http.ServerRequest

HTTP請求的消息, 一般由 http.Server的 request 事件發(fā)送.

HTTP 請求分: 請求頭.? 請求體

事件:

‘data’? ? 請求體數(shù)據(jù)來到時. 參數(shù) chunk 表示接收到的數(shù)據(jù)

’end’ ? ? 請求體數(shù)據(jù)傳輸完成時

’close’ 用戶當(dāng)前請求結(jié)束時

屬性:

complete? ? ? 客戶端請求是否已經(jīng)發(fā)送完成

httpVersion? HTTP 協(xié)議版本,通常是 1.0 或 1.1

method? HTTP 請求方法震糖,如 GET硝岗、POST萎馅、PUT、DELETE 等

url? ? ? 原始的請求路徑丈氓,例如 /static/image/x.jpg 或 /user?name=byvoid

headers? HTTP 請求頭

trailers? HTTP 請求尾(不常見)

connection? 當(dāng)前 HTTP 連接套接字旧乞,為 net.Socket 的實例

socket? connection 屬性的別名

client? client 屬性的別名

params? ? ? ? ? 多路由控制時的對象

http.ServerResponse

HTTP響應(yīng)消息是返回給客戶端的信息,決定了用戶最終看到的結(jié)果

函數(shù)

res.writeHead(statusCode, [headers])? 該函數(shù)在一次請求中最多調(diào)用一次. statusCode, 是HTTP狀態(tài)碼. 如200,404.? headers 類似數(shù)組的對象,表示響應(yīng)頭的每個屬性

res.write(data, [encoding])? ? ? ? ? 發(fā)送響應(yīng)內(nèi)容, 如果是字符串,需要制定編碼方式, 默認(rèn) utf-8

res.end(data, data, [encoding])? ? ? 結(jié)束響應(yīng),告知客戶端所有響應(yīng)完成. 此函數(shù)必須調(diào)用一次

API

HTTP動詞都是Express的方法. post 改、put 增茧痒、delete 刪、get 查

GET

GET 根據(jù)請求路徑來處理客戶端發(fā)出的GET請求

app.get(path, [callback(request, response)])

ALL

ALL 以匹配所有的HTTP動詞融蹂,也就是說它可以過濾所有路徑的請求

app.all(path, [callback(request, response, next)])

USE

USE express調(diào)用中間件的方法,它返回一個函數(shù). path默認(rèn)為"/"

app.use([path], [callback(request, response, next)])

USE 不僅可以調(diào)用中間件,還可以根據(jù)請求的網(wǎng)址弄企,返回不同的網(wǎng)頁內(nèi)容

app.use(function(request,response,next){if(request.url=="/"){response.send("Welcome to the homepage!");}else{next();}});app.use(function(request,response,next){if(request.url=="/about"){response.send("Welcome to the about page!");}else{next();}});app.use(function(request,response){response.send("404 error!");});

post

處理指定頁面的post請求

app.post(path,function(req, res));

想要使用 body 需要安裝中間件

npm install body-parser

npm install multer

調(diào)用

var bodyParser = require(‘body-parser’);

var multer = require(‘multer’);

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: true }));

app.use(multer());

req.body 解析客戶端的post請求參數(shù)

格式:req.body.參數(shù)名超燃;

注意: 表單所發(fā)送的 post請求 Accept 和 ajax 的不一樣

服務(wù)器 send 發(fā)回來的數(shù)據(jù),ajax是數(shù)據(jù), 表單會反映稱網(wǎng)頁

param/query/params

獲取主機(jī)名、路徑名.[這里的req就是回調(diào)函數(shù)中的第一個參數(shù)]

req.host 返回請求頭里取的主機(jī)名(不包含端口號);

req.path 返回請求的URL的路徑名

req.query 是一個對象,存儲著get請求路徑參數(shù)的對象屬性

www.***.com/shoes?order=desc&shoe[color]=blue&shoe[type]=converse? 網(wǎng)址

得到: { order: ‘desc’, shoe: { color: ‘blue’, type: ‘converse’ } }

req.param() 功能同上,不過是函數(shù)形式 req.param(‘order’) 返回 desc

// req.param('name') 還可以獲取具有相應(yīng)路由規(guī)則的請求對象app.get("/user/:name/",function(req,res){console.log(req.param("name"));res.send("使用req.param屬性獲取具有路由規(guī)則的參數(shù)對象值!");});

// req.params 同上,但可以匹配復(fù)雜命名路由規(guī)則的請求app.get("/user/:name/:id",function(req,res){console.log(req.params.id);});

send

send 方法向瀏覽器發(fā)送一個響應(yīng)信息拘领,并可以智能處理不同類型的數(shù)據(jù) send方法在輸出響應(yīng)時會自動進(jìn)行一些設(shè)置意乓,比如HEAD信息、HTTP緩存支持等等 類型可以是: String, Array, Object, Number. 當(dāng)參數(shù)為一個String時,Content-Type默認(rèn)設(shè)置為"text/html" 當(dāng)參數(shù)為Array或Object時届良,Express會返回一個JSON 當(dāng)參數(shù)為一個NumberExpress會幫你設(shè)置一個響應(yīng)體笆凌,比如:200

set

app.set(‘view engine’, ‘ejs’);? 設(shè)置默認(rèn)模板引擎

app.engine( ‘.html’, require( ‘ejs’ ).__express ); 修改模板引擎

"__express",ejs模塊的一個公共屬性士葫,表示要渲染的文件擴(kuò)展名

app.set(‘views’, __dirname);? 設(shè)定views變量乞而,意為視圖存放的目錄

express.static —— 指定靜態(tài)文件的查找目錄

app.use(express.static(require(‘path’).join(__dirname, ‘public’)));

模板操作:

app.set(‘views’, path.join(__dirname, ‘views’));

app.set(‘view engine’, ‘html’);

app.engine(’.html’, require(‘ejs’).__express);

這樣模板后綴可以使 .html? 但模板代碼是ejs代碼

render

何對網(wǎng)頁模板進(jìn)行訪問. res對象的render函數(shù)

res.render(view, [locals], callback);

view 視圖名, locals 為模板傳入變量

redirect

允許網(wǎng)址的重定向,跳轉(zhuǎn)到指定的url并且可以指定status慢显,默認(rèn)為302方式

根據(jù)指定url來重定向爪模,可以域內(nèi)路徑、網(wǎng)頁間跳轉(zhuǎn)也可以跳轉(zhuǎn)至不同域名

res.redirect([status], url);

res.redirect(“l(fā)ogin”);

Middleware<中間件>

中間件(middleware)就是處理HTTP請求的函數(shù)荚藻,用來完成各種特定的任務(wù)屋灌,比如檢查用戶是否登錄、分析數(shù)據(jù)应狱、以及其他在需要最終將數(shù)據(jù)發(fā)送給用戶之前完成的任務(wù)共郭。 它最大的特點就是,一個中間件處理完疾呻,可以把相應(yīng)數(shù)據(jù)再傳遞給下一個中間件除嘹。

//連續(xù)調(diào)用2個中間件app.use(function(request,response,next){console.log("method:"+request.method+" ==== "+"url:"+request.url);next();});app.use(function(request,response){response.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});response.end('示例:連續(xù)調(diào)用兩個中間件');});

由于這種原因,所以調(diào)用中間件的順序非常重要

設(shè)定靜態(tài)文件目錄的訪問路徑

express.static(path.join(__dirname, ‘/public’))

express-session

varsession=require('express-session');app.use(session({secret:'secret',resave:true,saveUninitialized:false,cookie:{maxAge:1000*60*10//過期時間設(shè)置(單位毫秒)}}));//新增中間件并設(shè)置模板變量值app.use(function(req,res,next){res.locals.user=req.session.user;varerr=req.session.error;res.locals.message='';if(err)res.locals.message='

'+err+'

';next();});

body-parser

npm install body-parser

npm install multer調(diào)用varbodyParser=require('body-parser');varmulter=require('multer');......app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:true}));app.use(multer());

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市罐韩,隨后出現(xiàn)的幾起案子憾赁,更是在濱河造成了極大的恐慌,老刑警劉巖散吵,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龙考,死亡現(xiàn)場離奇詭異,居然都是意外死亡矾睦,警方通過查閱死者的電腦和手機(jī)晦款,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枚冗,“玉大人缓溅,你說我怎么就攤上這事×尬拢” “怎么了坛怪?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長股囊。 經(jīng)常有香客問我袜匿,道長,這世上最難降的妖魔是什么稚疹? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任居灯,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怪嫌。我一直安慰自己义锥,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布岩灭。 她就那樣靜靜地躺著拌倍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪川背。 梳的紋絲不亂的頭發(fā)上贰拿,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音熄云,去河邊找鬼膨更。 笑死,一個胖子當(dāng)著我的面吹牛缴允,可吹牛的內(nèi)容都是我干的荚守。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼练般,長吁一口氣:“原來是場噩夢啊……” “哼矗漾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起薄料,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤敞贡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后摄职,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體誊役,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年谷市,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛔垢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡迫悠,死狀恐怖鹏漆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情创泄,我是刑警寧澤艺玲,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站鞠抑,受9級特大地震影響板驳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碍拆,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧感混,春花似錦端幼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庭呜,卻和暖如春滑进,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背募谎。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工扶关, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人数冬。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓节槐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拐纱。 傳聞我的和親對象是個殘疾皇子铜异,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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