请求 API

目录

Request

扩展 http.IncomingMessage

封装了所有的 Node.js http.IncomingMessage API、事件和属性,以及以下内容。

accepts

检查 Accept 头是否存在,并包含给定的类型。当 Accept 头不存在时,返回 true。否则检查是否完全匹配给定的类型,以及子类型。

参数

例子

您可以传递子类型,如 html,然后使用 mime 查找表将其内部转换为 text/html:

  1. // 接受:text/html
  2. req.accepts('html');
  3. // => true
  4. // 接受:text/*; application/json
  5. req.accepts('html');
  6. req.accepts('text/html');
  7. req.accepts('text/plain');
  8. req.accepts('application/json');
  9. // => true
  10. req.accepts('image/png');
  11. req.accepts('png');
  12. // => false

返回 Boolean,类型是否被接受。

acceptsEncoding

检查请求是否接受指定的编码类型。

参数

返回 Boolean,编码类型是否被接受。

contentLength

返回 content-length 头的值。

返回 Number

getContentType

返回 content-type 头的值。如果没有设置 content-type,将返回默认值 application/octet-stream

返回 String,内容类型。

date

返回一个 Date 对象,表示请求的建立时间。和 time() 一样,但返回一个 Date 对象。

返回 Date,何时开始处理请求。

href

返回完整的请求 URL。

例子

  1. // 传入的请求是 http://localhost:3000/foo/bar?a=1
  2. server.get('/:x/bar', function(req, res, next) {
  3. console.warn(req.href());
  4. // => /foo/bar/?a=1
  5. });

返回 String

id

返回请求 id。如果传入一个 reqId 值,这将成为请求的新 id。请求 id 是不可变的,并且只能设置一次。尝试多次设置请求 id 会导致 restify 抛出错误。

参数

返回 String,id。

getPath

返回已清理的请求 URL。

例子

  1. // 传入的请求是 http://localhost:3000/foo/bar?a=1
  2. server.get('/:x/bar', function(req, res, next) {
  3. console.warn(req.path());
  4. // => /foo/bar
  5. });

返回 String

getQuery

返回原始查询字符串。如果找不到查询字符串,则返回空字符串。

例子

  1. // 传入的请求是 /foo?a=1
  2. req.getQuery();
  3. // => 'a=1'

如果使用 queryParser 插件,则可以从 req.query 获取到解析后的查询字符串:

  1. // 传入的请求是 /foo?a=1
  2. server.use(restify.plugins.queryParser());
  3. req.query;
  4. // => { a: 1 }

返回 String 查询字符串。

time

自请求开始处理时起的时间 ms。和 date() 一样,但返回一个数字。

返回 Number,请求开始处理时的时间:自 1970年 1月 1日,UTC 时间 00:00:00 起的毫秒数。

version

返回 accept-version 头。

返回 String

header

获取不区分大小写的请求头关键字,可以选择提供默认值(兼容 express)。返回任何请求的报头。同时“纠正”任何拼写正确的“引用”报头为实际使用的拼写。

参数

  • key String 报头关键字
  • defaultValue String? 如果在请求中未找到报头,则使用默认值

例子

  1. req.header('Host');
  2. req.header('HOST');
  3. req.header('Accept', '*\/*');

返回 String 报头的值。

trailer

返回请求中的任何 trailer 头。返回任何请求的报头。同时“纠正”任何拼写正确的“引用”报头为实际使用的拼写。

参数

  • name String 报头的名称
  • value String 如果在请求中未找到报头,则使用默认值

返回 String trailer 值。

is

检查传入请求是否包含 Content-Type 头字段,以及是否包含给定的 MIME 类型。

参数

  • type String 一个 content-type 头的值

例子

  1. // 使用 Content-Type: text/html; charset=utf-8
  2. req.is('html');
  3. req.is('text/html');
  4. // => true
  5. // 当 Content-Type 是 application/json 时
  6. req.is('json');
  7. req.is('application/json');
  8. // => true
  9. req.is('html');
  10. // => false

返回 Boolean 是否是 content-type 头。

isChunked

检查传入的请求是否被分块。

返回 Boolean 是否被分块。

isKeepAlive

检查传入请求是否保持活动状态。

返回 Boolean 是否保持活动状态。

isSecure

检查传入请求是否加密。

返回 Boolean 是否加密。

isUpgradeRequest

检查传入请求是否已升级。

返回 Boolean 是否已升级。

isUpload

检查传入请求是否为上传动词。

返回 Boolean 是否为上传。

toString

toString 序列化

返回 String 序列化的请求。

userAgent

返回 user-agent 头。

返回 String 用户代理

startHandlerTimer

为请求处理程序启动计时器。默认情况下,restify 自动为处理程序链中注册的所有处理程序调用此操作。然而,这可以被手动调用为处理链中的嵌套函数记录时间信息。

参数

  • handlerName String 处理程序的名称

例子

调用此函数后,您必须显式调用 endHandlerTimer(),否则时间信息将不准确。

  1. server.get('/', function fooHandler(req, res, next) {
  2. vasync.pipeline({
  3. funcs: [
  4. function nestedHandler1(req, res, next) {
  5. req.startHandlerTimer('nestedHandler1');
  6. // do something
  7. req.endHandlerTimer('nestedHandler1');
  8. return next();
  9. },
  10. function nestedHandler1(req, res, next) {
  11. req.startHandlerTimer('nestedHandler2');
  12. // do something
  13. req.endHandlerTimer('nestedHandler2');
  14. return next();
  15. }...
  16. ]...
  17. }, next);
  18. });

返回 undefined 无返回值

endHandlerTimer

结束请求处理程序的计时器。如果在处理程序上调用 startRequestHandler,则必须调用此函数。否则,记录的时间将不正确。

参数

  • handlerName String 处理程序的名称

返回 undefined 无返回值

connectionState

返回请求的连接状态。当前可能的值是:

  • close - 当请求被客户关闭时

返回 String 连接状态 ("close")

getRoute

返回与当前请求匹配的路由对象。

例子

路由信息对象结构:

  1. {
  2. path: '/ping/:name',
  3. method: 'GET',
  4. versions: [],
  5. name: 'getpingname'
  6. }

返回 Object 路由

Log

如果您使用了 RequestLogger 插件,则可以在 req.log 上使用子记录器:

  1. function myHandler(req, res, next) {
  2. var log = req.log;
  3. log.debug({params: req.params}, 'Hello there %s', 'foo');
  4. }

子记录器会将请求的 UUID 注入到每个日志语句的 req._id 属性中。由于记录器在请求的生命周期中持续存在,您可以使用它跨越任何数量的独立处理程序来关联某个请求的语句。