1. 程式人生 > >nodejs -- express 之 req(響應)官方API 翻譯

nodejs -- express 之 req(響應)官方API 翻譯

【 翻譯不易,謝謝批評指正 】

請求

req物件表示的HTTP請求,並且具有用於請求查詢字串,引數,身體,HTTP報頭,等等性質。在本文件按照慣例,該物件總是被稱為req(和HTTP響應res),但它的實際名稱是由引數到您正在使用的回撥函式來確定。

例如:

app.get('/user/:id', function(req, res){
  res.send('user ' + req.params.id);
});

但是,你也可以同樣有:

app.get('/user/:id', function(request, response){
  response.send('user ' + request.
params.id); });

屬性

在快遞4,req.files是上不再req預設物件。要訪問上載檔案req.files物件,使用多處理中介軟體像打雜multer強大多方連線多黨佩斯

req.app

這個屬性儲存到使用中介軟體的Express應用程式的例項的引用。

如果您按照您建立只出口一箇中間件,以便要求它在你的主檔案模組的模式,那麼中介軟體可以通過訪問Express例項 req.app

例如:

//index.js
app.get("/viewdirectory", require("./mymiddleware.js"))
//mymiddleware.js
module.exports =
function (req, res) { res.send("The views directory is " + req.app.get("views")); });

req.baseUrl

在其上安裝一臺路由器例項的URL路徑。例如:

var greet = express.Router();

greet.get('/jp', function (req, res) {
  console.log(req.baseUrl); // /greet
  res.send('Konichiwa!');
});

app.use('/greet', greet); // load the router on '/greet'

即使您使用的路徑模式或一組的路徑模式載入路由器,該baseUrl屬性返回匹配的字串,而不是模式(S)。在下面的例子中,greet路由器被裝載在兩個路徑圖案。

app.use(['/gre+t', '/hel{2}o'], greet); // load the router on '/gre+t' and '/hel{2}o'

當一個請求到由/greet/jpreq.baseUrl是“/迎接”。當一個請求到由/hello/jpreq.baseUrl是“/你好”。

req.baseUrl類似於裝載路徑的屬性的app物件,除app.mountpath返回匹配的路徑模式(一個或多個)。

req.body

包含請求主體提交的資料的鍵值對。預設情況下,它是undefined,當你用身體解析的中介軟體如填充體解析器multer

這個例子說明如何使用身體解析中介軟體來填充req.body

var app = require('express')();
var bodyParser = require('body-parser');
var multer = require('multer'); 

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data

app.post('/', function (req, res) {
  console.log(req.body);
  res.json(req.body);
})

req.cookies

當使用cookie的解析器的中介軟體,該屬性是包含由請求傳送的cookies的物件。如果請求不包含餅乾,則預設為{}

// Cookie: name=tj
req.cookies.name
// => "tj"

欲瞭解更多資訊,問題或疑慮,請參閱cookie的解析器

req.fresh

指示該請求是否是“新鮮”。它的相反req.stale

如果它是真實的cache-control請求頭沒有一個no-cache指令,以及以下的為真:

  • if-modified-since請求報頭中指定和last-modified請求頭是等於或大於早期的教modified響應頭。
  • if-none-match請求頭是*
  • if-none-match請求頭中,在被解析成它的指令,不匹配etag的響應報頭。
req.fresh
// => true

欲瞭解更多資訊,問題或疑慮,看新鮮

req.hostname

包含從“主機” HTTP頭中的主機名。

// Host: "example.com:3000"
req.hostname
// => "example.com"

req.ip

請求的遠端IP地址。

如果trust proxy被設定enabled,它是上游地址; 看到快遞背後的代理獲取更多資訊。

req.ip
// => "127.0.0.1"

req.ips

trust proxy設定是true,此屬性包含在指定的IP地址的一個陣列中的“X -轉發,對於”請求頭。否則,它包含一個空陣列。

例如,如果“X -轉發,為”是“的客戶端,PROXY1,Proxy2將”,req.ips將是 ["client", "proxy1", "proxy2"],其中“Proxy2發出”是下游最遠。

有關詳細資訊trust proxy設定,請參見app.set

req.originalUrl

req.url是不是一個本土快遞屬性,它是從節點的繼承HTTP模組

此屬性很像req.url然而,它保留了原始請求的URL,可以讓你改寫req.url為內部路由的目的自如。例如,的“安裝”功能app.use()將重寫req.url剝離掛載點。

// GET /search?q=something
req.originalUrl
// => "/search?q=something"

req.params

包含對映到指定的路線“引數”屬性的物件。例如,如果你有路線/user/:name,那麼“名”屬性可作為req.params.name這個物件預設{}

// GET /user/tj
req.params.name
// => "tj"

當使用正則表示式的路由定義,使用陣列中提供了捕獲基團req.params[n],其中,n為第n 捕獲組。此規則適用於用繩子路線,如不具名萬用字元匹配/file/*

// GET /file/javascripts/jquery.js
req.params[0]
// => "javascripts/jquery.js"

req.path

包含請求URL的路徑部分。

// example.com/users?sort=desc
req.path
// => "/users"

當從中介軟體呼叫時,安裝點中不包括req.path查詢app.use()瞭解更多詳情。

req.protocol

請求協議串,當與TLS請求的“http”或“https”。當“信任代理” 設定信託套接字地址,“X -轉發,原”標題(“http”或“https”開頭)欄位的值將被信任並且如果存在使用。

req.protocol
// => "http"

req.query

包含在路由每個查詢字串引數的屬性的物件。如果沒有查詢字串,它是空的物件,{}

// GET /search?q=tobi+ferret
req.query.q
// => "tobi ferret"

// GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
req.query.order
// => "desc"

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

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

req.route

當前匹配的路線,一個字串。例如:

app.get('/user/:id?', function userIdHandler(req, res) {
  console.log(req.route);
  res.send('GET');
})

從先前的片段輸出例如:

{ path: '/user/:id?',
  stack:
   [ { handle: [Function: userIdHandler],
       name: 'userIdHandler',
       params: undefined,
       path: undefined,
       keys: [],
       regexp: /^\/?$/i,
       method: 'get' } ],
  methods: { get: true } }

req.secure

布林如果建立一個TLS連線這是真的。相當於:

'https' == req.protocol;

req.signedCookies

當使用cookie的解析器的中介軟體,此屬性包含簽署的請求,無符號和準備使用傳送的cookie。簽名餅乾駐留在不同的物件,以顯示開發者意圖; 否則,惡意攻擊可以被放置在 req.cookie值(這是很容易欺騙)。需要注意的是簽署一個cookie不會讓它“隱藏”或加密; 而只是防止篡改(因為用來簽名的祕密是私有的)。如果沒有簽訂cookie傳送,屬性預設為{}

// Cookie: user=tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3
req.signedCookies.user
// => "tobi"

欲瞭解更多資訊,問題或疑慮,請參閱cookie的解析器

req.stale

指示該請求是否是“陳舊”,並且是相反req.fresh欲瞭解更多資訊,請參見req.fresh

req.stale
// => true

req.subdomains

在該請求的域名子域的陣列。

// Host: "tobi.ferrets.example.com"
req.subdomains
// => ["ferrets", "tobi"]

req.xhr

一個布林值,是true如果請求的“X-請求-隨著”報頭欄位是“的XMLHttpRequest”,表明該請求是由客戶端庫發出如jQuery。

req.xhr
// => true

方法

req.accepts(型別)

檢查指定的內容型別是可接受的,基於所述請求的AcceptHTTP標頭欄位。該方法返回的最佳匹配,或者如果沒有指定內容的型別是可以接受的,返回undefined(在這種情況下,應用程式應該與響應406 "Not Acceptable")。

type值可以是一個單一的MIME型別字串(如“應用程式/ JSON”),副檔名,例如“JSON”,逗號分隔的列表,或陣列。為列表或陣列,則該方法返回最佳匹配(如果有的話)。

// Accept: text/html
req.accepts('html');
// => "html"

// Accept: text/*, application/json
req.accepts('html');
// => "html"
req.accepts('text/html');
// => "text/html"
req.accepts(['json', 'text']);
// => "json"
req.accepts('application/json');
// => "application/json"

// Accept: text/*, application/json
req.accepts('image/png');
req.accepts('png');
// => undefined

// Accept: text/*;q=.5, application/json
req.accepts(['html', 'json']);
// => "json"

欲瞭解更多資訊,或者如果你有問題或疑慮,請接受

req.acceptsCharsets(字符集[,...])

返回指定的字符集的第一接受字符集,基於所述請求的Accept-CharsetHTTP標頭欄位。如果沒有指定字符集的被接受,將返回false

欲瞭解更多資訊,或者如果你有問題或疑慮,請接受

req.acceptsEncodings(編碼[,...])

返回指定的編碼的第一編碼接受基於所述請求的Accept-EncodingHTTP標頭欄位。如果沒有指定的編碼被接受,將返回false

欲瞭解更多資訊,或者如果你有問題或疑慮,請接受

req.acceptsLanguages(朗[,...])

返回指定語言的第一個接受的語言,基於請求的Accept-LanguageHTTP頭欄位。如果沒有指定的語言被接受,將返回false

欲瞭解更多資訊,或者如果你有問題或疑慮,請接受

req.get(場)

返回指定的HTTP請求報頭欄位(不區分大小寫匹配)。ReferrerReferer領域是可以互換的。

req.get('Content-Type');
// => "text/plain"

req.get('content-type');
// => "text/plain"

req.get('Something');
// => undefined

別名為req.header(field)

req.is(型別)

返回true如果傳入的請求的“內容型別” HTTP標頭欄位匹配由指定的MIME型別type引數。返回false否則。

// With Content-Type: text/html; charset=utf-8
req.is('html');
req.is('text/html');
req.is('text/*');
// => true

// When Content-Type is application/json
req.is('json');
req.is('application/json');
req.is('application/*');
// => true

req.is('html');
// => false

欲瞭解更多資訊,或者如果你有問題或疑慮,請參閱型別是

req.param(名稱[,預設值])

已過時。二者必選其一req.paramsreq.bodyreq.query(如適用)。

返回PARAM的值name存在時。

// ?name=tobi
req.param('name')
// => "tobi"

// POST name=tobi
req.param('name')
// => "tobi"

// /user/tobi for /user/:name 
req.param('name')
// => "tobi"

查詢以下列順序進行:

  • req.params
  • req.body
  • req.query

或者,您可以指定defaultValue設定一個預設值,如果引數沒有任何要求物件的發現。

直接訪問req.bodyreq.params以及req.query應該贊成清晰-除非你真正接受來自每個物件的輸入。

車身解析中介軟體必須載入的req.param()可預測工作。請參閱req.body瞭解詳情。