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瞭解詳情。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章