欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Express URL跳轉(zhuǎn)(重定向)的實(shí)現(xiàn)方法

 更新時(shí)間:2017年04月07日 15:17:36   作者:都市煙火  
Express是一個(gè)基于Node.js實(shí)現(xiàn)的Web框架,其響應(yīng)HTTP請求的response對象中有兩個(gè)用于URL跳轉(zhuǎn)方法res.location()和res.redirect(),使用它們可以實(shí)現(xiàn)URL的301或302重定向。

Express是一個(gè)基于Node.js實(shí)現(xiàn)的Web框架,其響應(yīng)HTTP請求的response對象中有兩個(gè)用于URL跳轉(zhuǎn)方法res.location()和res.redirect(),使用它們可以實(shí)現(xiàn)URL的301或302重定向。

res.location(path)

res.location(path)

下面列舉了幾種,設(shè)置http響應(yīng)頭Location的方法

res.location('/foo/bar');
res.location('http://example.com');
res.location('back');

路徑值back具有特殊的意義,這個(gè)涉及到請求頭Referer中指定的URL,如果Referer頭沒有指定,將會(huì)設(shè)置為'/'。

Express通過Location頭將指定的URL字符串傳遞給瀏覽器,它并不會(huì)對指定的字符串進(jìn)行驗(yàn)證(除'back'外)。而瀏覽器則負(fù)責(zé)將當(dāng)前URL重定義到響應(yīng)頭Location中指定的URL。

res.redirect([status,] path)

其中參數(shù):

  1. status:{Number},表示要設(shè)置的HTTP狀態(tài)碼
  2. path:{String},要設(shè)置到Location頭中的URL

使用指定的http狀態(tài)碼,重定向到指定的URL,如果不指定http狀態(tài)碼,使用默認(rèn)的狀態(tài)碼”302“:”Found“,

res.redirect('/foo/bar');
res.redirect('http://example.com');
res.redirect(301, 'http://example.com');
res.redirect('../login');

重定向可以是一個(gè)完整的URL,這樣會(huì)重定向到一個(gè)不同的站點(diǎn)上。

res.redirect('http://google.com');

重定向也可以相對于所在主機(jī)的根目錄,例如,如果你的程序運(yùn)行在:http://example.com/admin/post/new上下面的代碼將會(huì)重定向到如下地址:http://example.com/admin

res.redirect('/admin');

重定向也可以相對于當(dāng)前的URL,例如:從http://example.com/blog/admin/這個(gè)地址(注意反斜杠),下面的代碼將會(huì)重定向到地址:http://example.com/blog/admin/post/new

res.redirect('post/new')

在從地址: http://example.com/blog/admin重定向到 post/new,如果沒有反斜杠的話將會(huì)重定向到:http://example.com/blog/post/new

如果你感覺上面的行為很迷惑,想想文件目錄和文件的路徑,這會(huì)讓你更好理解。

相對路徑的重定向也是允許的,如果你的地址是: http://example.com/admin/post/new,下面的代碼將會(huì)重定向到http//example.com/admin/post這個(gè)地址:

res.redirect('..');

back重定向,重定向到請求的

URL重定向原理

進(jìn)行URL重定向時(shí),服務(wù)器只在響應(yīng)信息的HTTP頭信息中設(shè)置了HTTP狀態(tài)碼和Location頭信息。

當(dāng)狀態(tài)碼為301或302時(shí)(301-永久重定向、302-臨時(shí)重定向),表示資源位置發(fā)生了改變,需要進(jìn)行重定向。

Location頭信息表示了資源的改變的位置,即:要跳重定向的URL。

 location()與redirect()的比較

Express的response對象,是對Node.js原生對象ServerResponse的擴(kuò)展。location()方法只會(huì)設(shè)置Location頭,而redirect()方法除了會(huì)設(shè)置Location頭外還可自動(dòng)或手頭設(shè)置HTTP狀態(tài)碼。理論上講兩者可以實(shí)現(xiàn)重定向。

location()方法實(shí)現(xiàn)過程大致如下:

res.location = function(url){
 var req = this.req;

 // "back" 是 referrer的別名
 if ('back' == url) url = req.get('Referrer') || '/';

 // 設(shè)置Lcation
 this.setHeader('Location', url);
 return this;
};

從以上代碼可以看出,location()方法本質(zhì)上是調(diào)用了ServerResponse對象的setHeader()方法,但并沒有設(shè)置狀態(tài)碼。通過location()設(shè)置頭信息后,其后的代碼還會(huì)執(zhí)行。

使用location()方法實(shí)現(xiàn)URL的重定向,還要手動(dòng)設(shè)置HTTP狀態(tài)碼:

res.location('http://itbilu.com');
res.statusCode = 301;

如果需要立即返回響應(yīng)信息,還要調(diào)用end()方法:

res.location('http://itbilu.com');
res.statusCode = 301;
res.end('響應(yīng)的內(nèi)容');

// 或
res.location('http://itbilu.com');
res.sent(302);

redirect()方法實(shí)現(xiàn)過程大致如下:

res.redirect = function(url){
 var head = 'HEAD' == this.req.method;
 var status = 302;
 var body;

 // 一些處理
 ……

 // 通過 location 方法設(shè)置頭信息
 this.location(url);
 
 // 另一些處理
 ……

 // 設(shè)置狀態(tài)并返回響應(yīng)
 this.statusCode = status;
 this.set('Content-Length', Buffer.byteLength(body));
 this.end(head ? null : body);
};

從以上代碼可以看出,redirect()方法是對location()方法的擴(kuò)展。通過location()設(shè)置Loction頭后,設(shè)置HTTP狀態(tài)碼,最后通過ServerResponse對象的end()方法返回響應(yīng)信息。調(diào)用redirect()方法后,其后的代碼都不會(huì)被執(zhí)行

重定向與不重定向

在使用的過程中,redirect()方法大多能重定向成功,而location()方法則不太確定,有時(shí)可以成功有時(shí)不能成功。這與我們的用法有關(guān)。

上面講過,URL重定向是在瀏覽器端完成的,而URL重定向與HTTP狀態(tài)碼和Location頭有關(guān)。瀏覽器首先會(huì)判斷狀態(tài)碼,只有當(dāng)狀態(tài)碼是:301或302時(shí),才會(huì)根據(jù)Location頭中的URL進(jìn)行跳轉(zhuǎn)。

所以,使用location()設(shè)置頭信息,而不設(shè)置狀態(tài)碼或狀態(tài)碼不是301或302,并不會(huì)發(fā)生重定向:

res.location('http://itbilu.com');
res.sent(200);

而使用redirect()設(shè)置的狀態(tài)碼不是301或302也不會(huì)發(fā)生跳轉(zhuǎn):

res.redirect(200, 'http://itbilu.com');

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用npm install時(shí)報(bào)錯(cuò)node-sass npm ERR command failed問題的解決方法

    用npm install時(shí)報(bào)錯(cuò)node-sass npm ERR command

    在用npm install時(shí)報(bào)錯(cuò)npm ERR! path D:…\node-sass和npm ERR! command failed 問題,本文給大家介紹了如何解決這個(gè)問題,文中通過圖文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • 深入koa-bodyparser原理解析

    深入koa-bodyparser原理解析

    這篇文章主要介紹了深入koa-bodyparser原理解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 一文學(xué)會(huì)如何升級npm管理的各依賴版本

    一文學(xué)會(huì)如何升級npm管理的各依賴版本

    npm在前端開發(fā)流程中提供了非常完善的自動(dòng)化工具鏈,已成為每個(gè)前端開發(fā)者必備的工具,下面這篇文章主要給大家介紹了關(guān)于如何升級npm管理的各依賴版本,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 在Node.js中實(shí)現(xiàn)獲取用戶頻道信息的功能

    在Node.js中實(shí)現(xiàn)獲取用戶頻道信息的功能

    在構(gòu)建社交或視頻分享平臺(tái)時(shí),允許用戶查看其他用戶的頻道信息是一個(gè)基本需求,本文將介紹如何在Node.js應(yīng)用中,使用Express框架和Mongoose庫來實(shí)現(xiàn)這一功能,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • 全面解析node 表單的圖片上傳

    全面解析node 表單的圖片上傳

    本文給大家介紹分享node全面解析表單的圖片上傳,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • node.js中的buffer.Buffer.byteLength方法使用說明

    node.js中的buffer.Buffer.byteLength方法使用說明

    這篇文章主要介紹了node.js中的buffer.Buffer.byteLength方法使用說明,本文介紹了buffer.Buffer.byteLength的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 利用nginx + node在阿里云部署https的步驟詳解

    利用nginx + node在阿里云部署https的步驟詳解

    這篇文章主要給大家介紹了關(guān)于利用nginx + node在阿里云部署https的步驟,文中通過圖文及示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件

    node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件

    這篇文章主要介紹了node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件的示例,幫助大家更好的理解和使用node.js,感興趣的朋友可以了解下
    2021-02-02
  • linux 下以二進(jìn)制的方式安裝 nodejs

    linux 下以二進(jìn)制的方式安裝 nodejs

    這篇文章主要介紹了linux 下以二進(jìn)制的方式安裝 nodejs,文中給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • node連接MySQL數(shù)據(jù)庫的3種方式總結(jié)

    node連接MySQL數(shù)據(jù)庫的3種方式總結(jié)

    現(xiàn)在前端基本上都會(huì)用一些NodeJs,想必也想自己寫一些API或者個(gè)人博客的后臺(tái)系統(tǒng),這些就離不開連接數(shù)據(jù)庫的問題,下面這篇文章主要給大家介紹了關(guān)于node連接MySQL數(shù)據(jù)庫的3種方式,需要的朋友可以參考下
    2022-08-08

最新評論