Nodejs Express 4.X 中文API 2--- Request篇

相关阅读:

Express 4.X API 翻译[一] --  Application篇

Express4.XApi 翻译[二] --  Request篇

Express4.XApi 翻译[三] --- Response篇

Express4.XApi 翻译[四] --- Router篇

req.params

这是一个包含着被命名的路由规则“参数”的对象属性。例如如果你有一个路由规则为:”/user/:name”,然后这个”name”属性你就可以使用req.params.name来调用,这个属性默认为 {}

1 //GET /user/tj
2 req.params.name
3 //=>"tj"

当在定义路由规则的时候使用了正则表达式,匹配结果会被提供在数组里使用req.params[N],这里的N指的是第n个匹配数组。这样的规则被应用在使用未命名的通配匹配规则,例如/file/*

1 //GET /file/javascript/jquery.js
2 req.params[0]
3 // => "javascripts/jquery.js"

req.query

这个属性是一个对象属性包含着被解析过的请求参数对象,默认为{}

 1 //GET /search?q=tobi+ferret
 2 req.query.q
 3 //=>"tobi ferret"
 4
 5 //GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
 6 req.query.order
 7 // =>"desc"
 8 req.query.shoe.color
 9 //=>"blue"
10 req.query.shoe.type
11 //=>"converse"

req.body

这个属性是包含一个被解析过的请求体。这个功能是中间件 bodyParser 提供的,尽管其他的请求体解析中间件也会很好的支持这样的约定。这个属性会在使用了bodyParser()的时候被定义为{}。

1 //POST user[name]=tobi&user[email][email protected]
2 req.body.user.name
3 //=> "tobi"
4 req.body.user.email
5 // =>"[email protected]"
6 //POST {"name":"tobi"}
7 req.body.name
8 //=>"tobi"

req.param(name)

返回一个参数名为 name 的值

 1 //?name=tobi
 2 req.param(‘name‘);
 3 //=>"tobi"
 4
 5 //POST name=tobi
 6 req.param(‘name‘)
 7 //=>"tobi"
 8
 9 // /user/tobi 对应的路由规则为 /user/:name
10 req.param(‘name‘)
11 //=> "tobi"

查找的优先级如下:

  • req.params
  • req.body
  • req.query

直接访问 req.body , req.params,和 req.query 应该是更加的清晰,除非你确实需要接受每个对象的输入。

req.route

当前匹配的 “Route” 包含一些属性,例如路由的原始字符串以及转换后的正则表达式等。

1 app.get(‘/user/:id?‘,function(req,res){
2     console.log(req.route);
3 });

上面的例子将会输出以下内容:

1 {
2   path: ‘/user/:id?‘,
3   keys: [ {name:‘id‘,optional:true} ],
4   regexp: /^\/user(?:\/([^\/]+?))?\/?$/i,
5   params:[id: ‘12‘]
6 }

req.cookies

当cookieParser()中间件被使用的时候,这个对象将会被初始化为{},除此之外,还包含了由用户代理发送过来的cookies

1 //Cookie: name=tj
2 req.cookies.name
3 // =>"tj"

如果有任何问题或者疑问,请查阅cookie-parser的附加文档

req.signedCookies

当 cookieParser(secret)中间件被执行的时候,这个对象会被初始化为{},还包含了用户代理发送过来的被签名的cookie,未签名的和准备使用的。签名后的cookies被存放在一个单独的对象内,否则,攻击者会很轻松的替换掉”req.cookie”内的值。需要注意的是,签名的cookies并不带表它们是隐藏的或者是加密的,这个只是同于防止篡改cookies。

1 //Cookie: user = tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3
2 req.signedCookies.user
3 //=> "tobi"

如果有任何问题或者疑问,请查阅cookie-parser的附加文档

req.get(field)

获取请求头内的 field 字段,不区分大小写,其中Referrer 和 Referer字段是可互换的。

1 req.get(‘Content-Type‘);
2 //=>"text/plain"
3 req.get(‘content-type‘);
4 // =>‘text/plain‘
5 req.get(‘Something‘);
6 //=> undefined

别名为 req.header(field);

req.accepts(types)

检查给定的类型 types 是不是可以接受的类型,当是可接受的类型时返回最佳的匹配,否则返回 undefined – 在这种情况下,你应该返回406″Not Acceptable”。

type 的值可以是单一的一个mine类型的字符串,比如”application/json”,扩展名为”json”,也可以是一个以逗号分隔的列表或者数组。当为列表或数组时将返回最佳匹配。

 1 //Accept: text/html
 2 req.accepts(‘html‘);
 3 //=>"html"
 4 // Accept: text/*, application/json
 5 req.accepts(‘html‘);
 6 // => "html"
 7 req.accepts(‘text/html‘);
 8 // => "text/html"
 9 req.accepts(‘json, text‘);
10 // => "json"
11 req.accepts(‘application/json‘);
12 // => "application/json"
13 // Accept: text/*, application/json
14 req.accepts(‘image/png‘);
15 req.accepts(‘png‘);
16 // => undefined
17 // Accept: text/*;q=.5, application/json
18 req.accepts([‘html‘, ‘json‘]);
19 req.accepts(‘html, json‘);
20 // => "json"

如果有任何问题或者疑问,请查阅accepts的附加文档

req.acceptsCharset(charset)

检查给定的 charset是否是可以被接受的

如果有任何问题或者疑问,请查阅accepts的附加文档

req.acceptsLanguage(lang)

检查给定的 lang 是否为可接受的

如果有任何问题或者疑问,请查阅accepts的附加文档

req.is(type)

检查提交进来的请求是否包含”Content-Type”头字段和他匹配的给定的mime type

 1 // With Content-Type: text/html; charset=utf-8
 2 req.is(‘html‘);
 3 req.is(‘text/html‘);
 4 req.is(‘text/*‘);
 5 // => true
 6 // When Content-Type is application/json
 7 req.is(‘json‘);
 8 req.is(‘application/json‘);
 9 req.is(‘application/*‘);
10 // => true
11 req.is(‘html‘);
12 // => false

如果有任何问题或者疑问,请查阅 type-is 的附加文档

req.ip

返回远程地址,或者在反向代理启用时返回上游ip地址。

1  req.ip
2  //=> 127.0.0.1

req.ips

当反向代理模式开启时,解析 “X-Forwarded-For” ip地址列表并返回一个数组,否则返回空数组。例如,如果一个值为”client,proxy1,proxy2″你将会收到数组["client","proxy1","proxy2"]这里可以看出”proxy2″是最远的下游地址。

req.path

返回请求的URL路径名。

1 //example com/users?sort=desc
2 req.path
3 // =>"/users"

req.host

返回从“Host”请求内取出的主机名,但是不包含端口号。

1  //Host: "example.com:3000"
2  req.host
3  //=> "example.com"

req.fresh

检查请求是否是新的 – 通过对Last-Modified或者 ETag进行匹配,来标明这个资源是不是”新的”。

1     req.fresh
2     //=>true

req.stale

检查这个请求是不是旧的 – 如果Last-Modified 或者 ETag 不匹配,标明这个资源是旧的。

1     req.stale
2     //=>true

req.xhr

检查请求头里是否有”X-Requested-With”这样的字段并且值为”XMLHttpRequest”(jQuery 等)请求时会设置这个头

1     req.xhr
2     //=> true

req.protocol

返回请求协议字符串 “http”或者”https”当请求为TLS时。当被启用反向代理时,”X-Forwarded-Proto” 请求头将会被信任。如果你运行一个支持https协议的反向代理,那么这个是会被支持的。

1     req.protocol
2     //=>"http"

req.secure

检查TLS连接是否已经被建立。下面是一段简写

1     ‘https‘ == req.protocol

req.subdomains

返回子域名数组

1 //Host:"tobi.ferrets.example.com"
2 req.subdomains
3 // =>[‘ferrets‘,‘tobi‘]

req.originalUrl

这个属性很像req.url,然而,他保留了原始请求的url,允许你在做内部路由的时候自由的重写 req.url。例如,app.use()会重写 req.url 为挂载点

1     // GET /search?q=something
2     req.originalUrl
3     //=> ‘/search?q=something‘

转自:http://www.90it.net/expressjs-4-api-zh-cn-request.html

时间: 2024-10-16 13:23:35

Nodejs Express 4.X 中文API 2--- Request篇的相关文章

Nodejs Express 4.X 中文API 1--- Application篇

相关阅读: Express 4.X API 翻译[一] --  Application篇 Express4.XApi 翻译[二] --  Request篇 Express4.XApi 翻译[三] --- Response篇 Express4.XApi 翻译[四] --- Router篇 本文是Express 4.x Api翻译系列的第一篇.由于笔者最近在学习NodeJs,刚刚接触了Node式的开发模式,被异步IO的编程方式深深吸引,于是准备系统学习一下这项新技术.因为没有任何NodeJs的基础,

Nodejs Express 4.X 中文API 3--- Response篇

相关阅读: Express 4.X API 翻译[一] --  Application篇 Express4.XApi 翻译[二] --  Request篇 Express4.XApi 翻译[三] --- Response篇 Express4.XApi 翻译[四] --- Router篇 本篇是Express 4.0 API翻译的第三篇,本篇的内容主要是Response的相关操作. res.status(code) 支持连贯调用的node’s的 res.statusCode = 的别名. 1 re

Nodejs Express 4.X 中文API 4--- Router篇

相关阅读: Express 4.X API 翻译[一] --  Application篇 Express4.XApi 翻译[二] --  Request篇 Express4.XApi 翻译[三] --- Response篇 Express4.XApi 翻译[四] --- Router篇 本篇是Express 4.0 API翻译的第四篇,本篇的内容主要是Router的相关操作. Router() 路由器是一个孤立的中间件和路由的实例.路由器可以被认为是一个”mini”的应用程序,仅能执行中间件和路

NodeJs+Express+SqlServer简易后台API服务搭建

首先安装nodejs 第一步 创建node项目配置package.json如下 express 使用方法可参考http://www.runoob.com/nodejs/nodejs-express-framework.html 连接sqlserver数据库我用的是node-mssql组件 使用方法可参考https://github.com/patriksimek/node-mssql 执行npm install 安装组件 第二步 新建server.js 代码如下: 第三步 执行代码 第四步 访问

nodejs express cheerio request爬虫

const express = require('express') const cheerio = require('cheerio') const request = require("request") const app = express() app.get("/:key", function (req, res) { let spider = new Spider() console.log(req.params.key) spider.fetch(&q

vue+nodejs+express+mysql 建立一个在线网盘程序

vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1.2 安装 MySQL 1.2.1 下载安装 MySQL 1.2.2 可能出现的问题和解决方案 1.3 安装 vue-cli 1.4 安装 express 第二章 数据库设计和创建 2.1 数据库和表设计 2.2 user 表 2.3 file 表 2.4 创建数据库和表所用 sql 语句参考 第三

nodeJS+Express+MongoDB

目录 一.MongoDB 1.1.安装MongoDB 1.1.1.配置运行环境 1.1.2.运行MongoDB 1.2.数据库操作 1.2.1.创建数据库与查看数据库 1.2.2.删除数据库 1.2.3.插入数据 1.2.4.查询数据 1.2.5.修改 1.2.6.删除 二.NodeJS访问MongoDB 2.1.安装MongoDB访问驱动 2.2.添加数据 2.3.修改数据 2.4.查询数据 2.5.删除数据 三.NodeJS+Express+MongoDB示例 四.示例下载 一.MongoD

使用nodejs+express+mongodb开发web的例子

介绍:简单的介绍下nodejs+express+mongodb这三者. nodejs:是运行在服务器端的程序语言,表面上看过去就是javascript一样的东西,实际是由c++开发是服务器语言. express:是nodejs的一种web框架,node有很多的开源框架,express是一个大神开发的(这尊神已经移驾到go语言的开发去了).express可以让你更方便的操作node(因为直接用nodejs写web比较麻烦,nodejs是事件驱动的,所以有很多异步回调,写多了就看着晕...) mon

nodejs+express+ejs+mongoose实例

nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码,主要是业务逻辑这块(CRUD),这个没什么难度.目前尚未解决的问题是:express不能使用ejs layout template,查了好久也没解决,知道的麻烦告诉我一下. 一.代码目录 二.第三方模块 1.express (1)express中文入门指引手册 (2)nodejs中文电子书 (3)