express node.js express

安裝:

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

npm install-g express//安裝 express

然后

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

express -V

我現在查看到的版本是 4.9.0

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

http.Server

var http = require(‘http’);

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

屬性:

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

方法:

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

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

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

事件:

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

‘connection’ 新的TCP建立時觸發. 提供1個 socket 參數 net.Socket 實例

‘close’ 服務器關閉時觸發 無參

http.ServerRequest

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

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

事件:

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

’end’ ? ? 請求體數據傳輸完成時

’close’ 用戶當前請求結束時

屬性:

complete? ? ? 客戶端請求是否已經發送完成

httpVersion? HTTP 協議版本,通常是 1.0 或 1.1

method? HTTP 請求方法,如 GET、POST、PUT、DELETE 等

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

headers? HTTP 請求頭

trailers? HTTP 請求尾(不常見)

connection? 當前 HTTP 連接套接字,為 net.Socket 的實例

socket? connection 屬性的別名

client? client 屬性的別名

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

http.ServerResponse

HTTP響應消息是返回給客戶端的信息,決定了用戶最終看到的結果

函數

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

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

res.end(data, data, [encoding])? ? ? 結束響應,告知客戶端所有響應完成. 此函數必須調用一次

API

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

GET

GET 根據請求路徑來處理客戶端發出的GET請求

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

ALL

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

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

USE

USE express調用中間件的方法,它返回一個函數. path默認為"/"

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

USE 不僅可以調用中間件,還可以根據請求的網址,返回不同的網頁內容

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

調用

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請求參數

格式:req.body.參數名;

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

服務器 send 發回來的數據,ajax是數據, 表單會反映稱網頁

param/query/params

獲取主機名、路徑名.[這里的req就是回調函數中的第一個參數]

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

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

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

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

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

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

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

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

send

send 方法向瀏覽器發送一個響應信息,并可以智能處理不同類型的數據 send方法在輸出響應時會自動進行一些設置,比如HEAD信息、HTTP緩存支持等等 類型可以是: String, Array, Object, Number. 當參數為一個String時,Content-Type默認設置為"text/html" 當參數為Array或Object時,Express會返回一個JSON 當參數為一個NumberExpress會幫你設置一個響應體,比如:200

set

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

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

"__express",ejs模塊的一個公共屬性,表示要渲染的文件擴展名

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

express.static —— 指定靜態文件的查找目錄

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

何對網頁模板進行訪問. res對象的render函數

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

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

redirect

允許網址的重定向,跳轉到指定的url并且可以指定status,默認為302方式

根據指定url來重定向,可以域內路徑、網頁間跳轉也可以跳轉至不同域名

res.redirect([status], url);

res.redirect(“login”);

Middleware<中間件>

中間件(middleware)就是處理HTTP請求的函數,用來完成各種特定的任務,比如檢查用戶是否登錄、分析數據、以及其他在需要最終將數據發送給用戶之前完成的任務。 它最大的特點就是,一個中間件處理完,可以把相應數據再傳遞給下一個中間件。

//連續調用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('示例:連續調用兩個中間件');});

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

設定靜態文件目錄的訪問路徑

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//過期時間設置(單位毫秒)}}));//新增中間件并設置模板變量值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調用varbodyParser=require('body-parser');varmulter=require('multer');......app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:true}));app.use(multer());

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容