最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js的Express框架使用上手指南

 更新時間:2016年03月12日 15:50:06   作者:xiaozhi  
這篇文章主要介紹了Node.js的Express框架使用上手指南,Express可以說是目前Node世界中人氣最高的開發(fā)框架,需要的朋友可以參考下

Express介紹
npm提供了大量的第三方模塊,其中不乏許多Web框架,比如我們本章節(jié)要講述的一個輕量級的Web框架 ——— Express。

Express是一個簡潔、靈活的node.js Web應用開發(fā)框架, 它提供一系列強大的功能,比如:模板解析、靜態(tài)文件服務、中間件、路由控制等等,并且還可以使用插件或整合其他模塊來幫助你創(chuàng)建各種 Web和移動設備應用,是目前最流行的基于Node.js的Web開發(fā)框架,并且支持Ejs、jade等多種模板,可以快速地搭建一個具有完整功能的網(wǎng)站。

好,下面我們就開始吧!

1. NPM安裝

npm install express

2. 獲取、引用

var express = require('express');
var app = express();

通過變量“app”我們就可以調(diào)用express的各種方法了,好戲剛剛開始,繼續(xù)加油吧!

創(chuàng)建應用
認識了Express框架,我們開始創(chuàng)建我們的第一個express應用。

在我們的默認項目主文件app.js添加如下內(nèi)容:

var express = require('express');
var app = express();
app.get('/', function (request, response) {
  response.send('Hello World!');
});

app.listen(80);

說明:在后面課程學習中,我們會統(tǒng)一使用80端口用于監(jiān)聽請求。

添加完畢之后,通過右側(cè)欄的“測試地址”來查看瀏覽器內(nèi)容,當看到“Hello World!”內(nèi)容就表明一個簡單的express應用已經(jīng)創(chuàng)建成功了。

get請求
前面我們實現(xiàn)了一個簡單的express應用,下面我們就開始具體講述它的具體實現(xiàn),首先我們先來學習Express的常用方法。

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

格式:

app.get(path,function(request, response));

path為請求的路徑,第二個參數(shù)為處理請求的回調(diào)函數(shù),有兩個參數(shù)分別是request和response,代表請求信息和響應信息。

如下示例:

var express = require('express');
var app = express();

app.get('/', function(request, response) {
  response.send('Welcome to the homepage!');
});
app.get('/about', function(request, response) {
  response.send('Welcome to the about page!');
});
app.get("*", function(request, response) {
  response.send("404 error!");
});
app.listen(80);

上面示例中,指定了about頁面路徑、根路徑和所有路徑的處理方法。并且在回調(diào)函數(shù)內(nèi)部,使用HTTP回應的send方法,表示向瀏覽器發(fā)送一個字符串。

參照以上代碼,試試自己設定一個get請求路徑,然后瀏覽器訪問該地址是否可以請求成功。

Middleware<中間件>
1.什么是中間件?

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

2.一個不進行任何操作、只傳遞request對象的中間件,大概是這樣:

function Middleware(request, response, next) {
  next();
}

上面代碼的next為中間件的回調(diào)函數(shù)。如果它帶有參數(shù),則代表拋出一個錯誤,參數(shù)為錯誤文本。

function Middleware(request, response, next) {
  next('出錯了!');
}

拋出錯誤以后,后面的中間件將不再執(zhí)行,直到發(fā)現(xiàn)一個錯誤處理函數(shù)為止。如果沒有調(diào)用next方法,后面注冊的函數(shù)也是不會執(zhí)行的。

all函數(shù)的基本用法
和get函數(shù)不同app.all()函數(shù)可以匹配所有的HTTP動詞,也就是說它可以過濾所有路徑的請求,如果使用all函數(shù)定義中間件,那么就相當于所有請求都必須先通過此該中間件。

格式:

app.all(path,function(request, response));

如下所示,我們使用all函數(shù)在請求之前設置響應頭屬性。

var express = require("express");
var app = express();

app.all("*", function(request, response, next) {
  response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); //設置響應頭屬性值
next();
});

app.get("/", function(request, response) {
  response.end("歡迎來到首頁!");
});

app.get("/about", function(request, response) {
  response.end("歡迎來到about頁面!");
});

app.get("*", function(request, response) {
  response.end("404 - 未找到!");
});

app.listen(80);

上面代碼參數(shù)中的“*”表示對所有路徑有效,這個方法在給特定前綴路徑或者任意路徑上處理時會特別有用,不管我們請求任何路徑都會事先經(jīng)過all函數(shù)。

如果所示,如果我們跳過all函數(shù)又會怎么樣呢,自己動手試一試?

use基本用法1
use是express調(diào)用中間件的方法,它返回一個函數(shù)。

格式:

app.use([path], function(request, response, next){});

//可選參數(shù)path默認為"/"。

1. 使用中間件

app.use(express.static(path.join(__dirname, '/')));

如上呢,我們就使用use函數(shù)調(diào)用express中間件設定了靜態(tài)文件目錄的訪問路徑(這里假設為根路徑)。

2. 如何連續(xù)調(diào)用兩個中間件呢,如下示例:

var express = require('express');
var app = express();

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)用兩個中間件');
});

app.listen(80);

回調(diào)函數(shù)的next參數(shù),表示接受其他中間件的調(diào)用,函數(shù)體中的next(),表示將請求數(shù)據(jù)傳遞給下一個中間件。

上面代碼先調(diào)用第一個中間件,在控制臺輸出一行信息,然后通過next(),調(diào)用第二個中間件,輸出HTTP回應。由于第二個中間件沒有調(diào)用next方法,所以req對象就不再向后傳遞了。

use基本用法2
use方法不僅可以調(diào)用中間件,還可以根據(jù)請求的網(wǎng)址,返回不同的網(wǎng)頁內(nèi)容,如下示例:

var express = require("express");
var app = express();

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!");
});
app.listen(80);

上面代碼通過request.url屬性,判斷請求的網(wǎng)址,從而返回不同的內(nèi)容。

回調(diào)函數(shù)
Express回調(diào)函數(shù)有兩個參數(shù),分別是request(簡稱req)和response(簡稱res),request代表客戶端發(fā)來的HTTP請求,request代表發(fā)向客戶端的HTTP回應,這兩個參數(shù)都是對象。示例如下:

function(req, res) {
});

在后面的學習中,我們會經(jīng)常和它打交道,牢牢記住它的格式吧!

獲取主機名、路徑名
今天我們就先來學習如何使用req對象來處理客戶端發(fā)來的HTTP請求。

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

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

如下示例:

var express = require('express');
var app = express();

app.get("*", function(req, res) {
  console.log(req.path);
  res.send("req.host獲取主機名,req.path獲取請求路徑名!");
});

app.listen(80);

試一試在瀏覽器中輸入任意一個請求路徑,通過req查看主機名或請求路徑。

query基本用法
query是一個可獲取客戶端get請求路徑參數(shù)的對象屬性,包含著被解析過的請求參數(shù)對象,默認為{}。

var express = require('express');
var app = express();

app.get("*", function(req, res) {
  console.log(req.query.參數(shù)名);
  res.send("測試query屬性!");
});

app.listen(80);

通過req.query獲取get請求路徑的對象參數(shù)值。

格式:req.query.參數(shù)名;請求路徑如下示例:

例1: /search?n=Lenka

req.query.n // "Lenka"

例2: /shoes?order=desc&shoe[color]=blue&shoe[type]=converse

req.query.order // "desc"

req.query.shoe.color // "blue"

req.query.shoe.type // "converse"

試一試get請求一個帶參數(shù)路徑,使用“req.query.參數(shù)名”方法獲取請求參數(shù)值。

param基本用法
和屬性query一樣,通過req.param我們也可以獲取被解析過的請求參數(shù)對象的值。

格式:req.param("參數(shù)名");請求路徑如下示例:

例1: 獲取請求根路徑的參數(shù)值,如/?n=Lenka,方法如下:

var express = require('express');
var app = express();

app.get("/", function(req, res) {

  console.log(req.param("n")); //Lenka

  res.send("使用req.param屬性獲取請求根路徑的參數(shù)對象值!");

});
app.listen(80);

例2:我們也可以獲取具有相應路由規(guī)則的請求對象,假設路由規(guī)則為 /user/:name/,請求路徑/user/mike,如下:

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

PS:所謂“路由”,就是指為不同的訪問路徑,指定不同的處理方法。

看了上面的示例,試一試使用req.param屬性解析一個請求路徑對象,并獲取請求參數(shù)值。

params基本用法
和param相似,但params是一個可以解析包含著有復雜命名路由規(guī)則的請求對象的屬性。

格式:req.params.參數(shù)名;

例1. 如上課時請求根路徑的例子,我們就可以這樣獲取,如下:

var express = require('express');
var app = express();

app.get("/user/:name/", function(req, res) {
  console.log(req.params.name); //mike
  res.send("使用req.params屬性獲取具有路由規(guī)則的參數(shù)對象值!");
});

app.listen(80);

查看運行結(jié)果,和param屬性功能是一樣的,同樣獲取name參數(shù)值。

例2:當然我們也可以請求復雜的路由規(guī)則,如/user/:name/:id,假設請求地址為:/user/mike/123,如下:

app.get("/user/:name/:id", function(req, res) {
  console.log(req.params.id); //"123"
  res.send("使用req.params屬性復雜路由規(guī)則的參數(shù)對象值!");
});

對于請求地址具有路由規(guī)則的路徑來說,屬性params比param屬性是不是又強大了那么一點點呢!

send基本用法
send()方法向瀏覽器發(fā)送一個響應信息,并可以智能處理不同類型的數(shù)據(jù)。格式如下: res.send([body|status], [body]);

1.當參數(shù)為一個String時,Content-Type默認設置為"text/html"。

res.send('Hello World'); //Hello World

2.當參數(shù)為Array或Object時,Express會返回一個JSON。

res.send({ user: 'tobi' }); //{"user":"tobi"}
res.send([1,2,3]); //[1,2,3]

3.當參數(shù)為一個Number時,并且沒有上面提到的任何一條在響應體里,Express會幫你設置一個響應體,比如:200會返回字符"OK"。

res.send(200); // OK
res.send(404); // Not Found
res.send(500); // Internal Server Error

send方法在輸出響應時會自動進行一些設置,比如HEAD信息、HTTP緩存支持等等。

相關(guān)文章

  • Node.JS在命令行中檢查Chrome瀏覽器是否安裝并打開指定網(wǎng)址

    Node.JS在命令行中檢查Chrome瀏覽器是否安裝并打開指定網(wǎng)址

    這篇文章主要介紹了Node.JS在命令行中檢查Chrome瀏覽器是否安裝,并打開指定網(wǎng)址,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • node解析修改nginx配置文件操作實例分析

    node解析修改nginx配置文件操作實例分析

    這篇文章主要介紹了node解析修改nginx配置文件操作,結(jié)合實例形式分析了node.js使用nginx-conf解析修改nginx配置文件的相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Visual?Studio?Code中npm腳本找不到圖文解決辦法

    Visual?Studio?Code中npm腳本找不到圖文解決辦法

    這篇文章主要給大家介紹了關(guān)于Visual?Studio?Code中npm腳本找不到的圖文解決辦法,做前端開發(fā)如果項目達到了一定的規(guī)模就離不開npm了,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • node.js配置Token驗證的2種方式總結(jié)

    node.js配置Token驗證的2種方式總結(jié)

    token驗證,在設計登錄注冊和一些權(quán)限接口時發(fā)揮作用,下面這篇文章主要給大家介紹了關(guān)于node.js配置Token驗證的2種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Node.js Event Loop各階段講解

    Node.js Event Loop各階段講解

    今天小編就為大家分享一篇關(guān)于Node.js Event Loop各階段講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Mac OS X 系統(tǒng)下安裝和部署Egret引擎開發(fā)環(huán)境

    Mac OS X 系統(tǒng)下安裝和部署Egret引擎開發(fā)環(huán)境

    之前的文章,我們已經(jīng)介紹了Windows 系統(tǒng)下安裝和部署Egret的開發(fā)環(huán)境,那么,這篇文檔中,我們主要介紹在Mac環(huán)境中安裝Egret以及部署
    2014-09-09
  • 三步教你完成切換nodejs版本

    三步教你完成切換nodejs版本

    nvm是一個node的版本管理工具,可以簡單操作node版本的切換、安裝、查看,下面這篇文章主要給大家介紹了關(guān)于如何通過三步完成切換nodejs版本的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • node.js中的fs.chmod方法使用說明

    node.js中的fs.chmod方法使用說明

    這篇文章主要介紹了node.js中的fs.chmod方法使用說明,本文介紹了fs.chmod方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 利用node實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)導出到Excel

    利用node實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)導出到Excel

    本文將詳細講解如何使用Node.js實現(xiàn)從MySQL數(shù)據(jù)庫獲取數(shù)據(jù),并生成包含多個工作表的 Excel 文件,每個工作表對應數(shù)據(jù)庫中的一個表,有需要的可以了解下
    2024-11-11
  • Windows系統(tǒng)下安裝Node.js的步驟圖文詳解

    Windows系統(tǒng)下安裝Node.js的步驟圖文詳解

    這篇文章主要給大家介紹了Windows系統(tǒng)下Node.js的安裝教程,Node.js是用于后端編程的JavaScript框架,文中給出了詳細圖文介紹,有需要的朋友可以參考下,下面來一起看看吧。
    2016-11-11

最新評論

青铜峡市| 南丹县| 洪洞县| 铜梁县| 仲巴县| 积石山| 靖安县| 开原市| 湘阴县| 曲水县| 来安县| 错那县| 左权县| 和龙市| 来宾市| 武穴市| 镇坪县| 阿瓦提县| 牙克石市| 都江堰市| 西贡区| 高安市| 通山县| 怀远县| 南乐县| 抚顺县| 塔城市| 体育| 武威市| 武安市| 醴陵市| 阿拉善右旗| 浪卡子县| 皋兰县| 东阿县| 襄汾县| 无棣县| 富平县| 安化县| 玉溪市| 虹口区|