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了解详情。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值