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/jp
,req.baseUrl
是“/迎接”。當一個請求到由/hello/jp
,req.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(型別)
檢查指定的內容型別是可接受的,基於所述請求的Accept
HTTP標頭欄位。該方法返回的最佳匹配,或者如果沒有指定內容的型別是可以接受的,返回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-Charset
HTTP標頭欄位。如果沒有指定字符集的被接受,將返回false
。
欲瞭解更多資訊,或者如果你有問題或疑慮,請接受。
req.acceptsEncodings(編碼[,...])
返回指定的編碼的第一編碼接受基於所述請求的Accept-Encoding
HTTP標頭欄位。如果沒有指定的編碼被接受,將返回false
。
欲瞭解更多資訊,或者如果你有問題或疑慮,請接受。
req.acceptsLanguages(朗[,...])
返回指定語言的第一個接受的語言,基於請求的Accept-Language
HTTP頭欄位。如果沒有指定的語言被接受,將返回false
。
欲瞭解更多資訊,或者如果你有問題或疑慮,請接受。
req.get(場)
返回指定的HTTP請求報頭欄位(不區分大小寫匹配)。在Referrer
和Referer
領域是可以互換的。
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.params
,req.body
或req.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.body
,req.params
以及req.query
應該贊成清晰-除非你真正接受來自每個物件的輸入。
車身解析中介軟體必須載入的req.param()
可預測工作。請參閱req.body瞭解詳情。