该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,强大,多方,连接多党或佩斯。
这个属性保存到使用中间件的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"));
});
在其上安装一台路由器实例的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
返回匹配的路径模式(一个或多个)。
包含请求主体提交的数据的键值对。默认情况下,它是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);
})
当使用cookie的解析器的中间件,该属性是包含由请求发送的cookies的对象。如果请求不包含饼干,则默认为{}
。
// Cookie: name=tj
req.cookies.name
// => "tj"
欲了解更多信息,问题或疑虑,请参阅cookie的解析器。
指示该请求是否是“新鲜”。它的相反req.stale
。
如果它是真实的cache-control
请求头没有一个no-cache
指令,以及以下的为真:
if-modified-since
请求报头中指定和last-modified
请求头是等于或大于早期的教modified
响应头。if-none-match
请求头是*
。if-none-match
请求头中,在被解析成它的指令,不匹配etag
的响应报头。req.fresh
// => true
欲了解更多信息,问题或疑虑,看新鲜。
包含从“主机” HTTP头中的主机名。
// Host: "example.com:3000"
req.hostname
// => "example.com"
请求的远程IP地址。
如果trust proxy
被设置enabled,它是上游地址; 看到快递背后的代理获取更多信息。
req.ip
// => "127.0.0.1"
当trust proxy
设置是true
,此属性包含在指定的IP地址的一个阵列中的“X -转发,对于”请求头。否则,它包含一个空数组。
例如,如果“X -转发,为”是“的客户端,PROXY1,Proxy2将”,req.ips
将是 ["client", "proxy1", "proxy2"]
,其中“Proxy2发出”是下游最远。
有关详细信息trust proxy
设置,请参见app.set。
req.url
是不是一个本土快递属性,它是从节点的继承HTTP模块。
此属性很像req.url
; 然而,它保留了原始请求的URL,可以让你改写req.url
为内部路由的目的自如。例如,的“安装”功能app.use()将重写req.url
剥离挂载点。
// GET /search?q=something
req.originalUrl
// => "/search?q=something"
包含映射到指定的路线“参数”属性的对象。例如,如果你有路线/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"
包含请求URL的路径部分。
// example.com/users?sort=desc
req.path
// => "/users"
当从中间件调用时,安装点中不包括req.path
。查找app.use()了解更多详情。
请求协议串,当与TLS请求的“http”或“https”。当“信任代理” 设置信托套接字地址,“X -转发,原”标题(“http”或“https”开头)字段的值将被信任并且如果存在使用。
req.protocol
// => "http"
包含在路由每个查询字符串参数的属性的对象。如果没有查询字符串,它是空的对象,{}
。
// 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"
当前匹配的路线,一个字符串。例如:
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 } }
布尔如果建立一个TLS连接这是真的。相当于:
'https' == req.protocol;
当使用cookie的解析器的中间件,此属性包含签署的请求,无符号和准备使用发送的cookie。签名饼干驻留在不同的对象,以显示开发者意图; 否则,恶意攻击可以被放置在 req.cookie
值(这是很容易欺骗)。需要注意的是签署一个cookie不会让它“隐藏”或加密; 而只是防止篡改(因为用来签名的秘密是私有的)。如果没有签订cookie发送,属性默认为{}
。
// Cookie: user=tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3
req.signedCookies.user
// => "tobi"
欲了解更多信息,问题或疑虑,请参阅cookie的解析器。
指示该请求是否是“陈旧”,并且是相反req.fresh
。欲了解更多信息,请参见req.fresh。
req.stale
// => true
在该请求的域名子域的阵列。
// Host: "tobi.ferrets.example.com"
req.subdomains
// => ["ferrets", "tobi"]
一个布尔值,是true
如果请求的“X-请求-随着”报头字段是“的XMLHttpRequest”,表明该请求是由客户端库发出如jQuery。
req.xhr
// => true
检查指定的内容类型是可接受的,基于所述请求的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"
欲了解更多信息,或者如果你有问题或疑虑,请接受。
返回指定的字符集的第一接受字符集,基于所述请求的Accept-Charset
HTTP标头字段。如果没有指定字符集的被接受,将返回false
。
欲了解更多信息,或者如果你有问题或疑虑,请接受。
返回指定的编码的第一编码接受基于所述请求的Accept-Encoding
HTTP标头字段。如果没有指定的编码被接受,将返回false
。
欲了解更多信息,或者如果你有问题或疑虑,请接受。
返回指定语言的第一个接受的语言,基于请求的Accept-Language
HTTP头字段。如果没有指定的语言被接受,将返回false
。
欲了解更多信息,或者如果你有问题或疑虑,请接受。
返回指定的HTTP请求报头字段(不区分大小写匹配)。在Referrer
和Referer
领域是可以互换的。
req.get('Content-Type');
// => "text/plain"
req.get('content-type');
// => "text/plain"
req.get('Something');
// => undefined
别名为req.header(field)
。
返回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.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了解详情。