express req 请求对象的常用属性 路由 url请求发送参数的 4 种方法

环境初始化

利用express-generator生成简易的express框架环境。

npm install -g express-generator
express demo-express
cd demo-express
npm install

编写./routes/user.js文件|模块中的的路由方法。

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

/**
 * @description print request's field, in express.
 * @author wuyujin1997
 */
router.all('/:userId/profile', function(req, res) {
  var obj = {
    method: req.method,
    
    protocol: req.protocol,
    hostname: req.hostname,
    ip: req.ip,
    
    originalUrl: req.originalUrl,
    baseUrl: req.baseUrl,
    url: req.url,
    path: req.path,

    query: req.query,
    params: req.params,
    body: req.body,
    cookies: req.cookies,
  }
  // console.log(req);
  res.json(obj);
});

module.exports = router;

应注意的是
app.js

var express = require('express');
var usersRouter = require('./routes/users');	// 引入user路由模块

var app = express();	// 实例化express对象

app.use('/users', usersRouter);	// 使用中间件

也就是说,完整的访问URL应该是包含/users的(url拼接)。

运行node应用

node app.js
npm run start,但应先回到项目根目录,再执行该命令。

访问测试

我使用postman模拟请求。分别在本地和腾讯云启动了node应用,进行访问。
请求均使用post方法,url分别为:
- 本地服务:http://dell3550:3000/users/12343/profile?mode=1&safe=true
dell3550为我的计算机名(查询方式:我的电脑-->属性-->计算机名)
- 腾讯云服务:http://www.wuyujin.com:3000/users/12343/profile?mode=1&safe=true
www.wuyujin.com为服务器绑定域名
当然也可以直接通过IP定位机器。

至于请求体request body、请求头request header(包括Cookie)的设置就不细说。

访问部署在本地的应用,响应内容:

{
    "method": "POST",
    "protocol": "http",
    "hostname": "dell3550",
    "ip": "::ffff:192.168.158.1",
    "originalUrl": "/users/12343/profile?mode=1&safe=true",
    "baseUrl": "/users",
    "url": "/12343/profile?mode=1&safe=true",
    "path": "/12343/profile",
    "query": {
        "mode": "1",
        "safe": "true"
    },
    "params": {
        "userId": "12343"
    },
    "body": {
        "name": "张三",
        "age": 22
    },
    "cookies": {
        "Wuyujin_session_id": "aasdkjasdksadjhsak213",
        "Path": "/",
        "Domain": "xxx.com",
        "Expires": "xxx time"
    }
}

访问部署在腾讯云的应用,响应内容:

{
    "method": "POST",
    "protocol": "http",
    "hostname": "www.wuyujin.com",
    "ip": "::ffff:222.65.73.35",
    "originalUrl": "/users/12343/profile?mode=1&safe=true",
    "baseUrl": "/users",
    "url": "/12343/profile?mode=1&safe=true",
    "path": "/12343/profile",
    "query": {
        "mode": "1",
        "safe": "true"
    },
    "params": {
        "userId": "12343"
    },
    "body": {
        "name": "张三",
        "age": 22
    },
    "cookies": {
        "Wuyujin_session_id": "aasdkjasdksadjhsak213",
        "Path": "/",
        "Domain": "xxx.com",
        "Expires": "xxx time"
    }
}

总结

express框架中封装的request对象(TypeScript定义文件中的类型为IncomingMessage,可通过console.log(req)查看req对象的所有成员)。
其常用属性:

  • req.method HTTP请求方法,大写的POST DELETE PUT GET等。

url路由相关

  • req.protocol 网络协议,常见的有http https等。

  • req.hostname 主机名称(这个属性的值取决于你用主机名/域名/ip地址去访问)

  • req.ip 用户发起请求的机器的IP。

  • req.originalUrl protocol://hostname:ip/之后的url + 请求参数对,如 /users/12343/profile?mode=1&safe=true

  • req.baseUrl baseUrl+url才是originalUrl

  • req.url 可以看出,baseUrl就是app.use('/users', usersRouter)中设置的/users,而url是在users.js中具体的方法中的路由URL。

  • req.path pathurl去掉请求参数对的部分。
    请求参数对即拼接在URL中的形如?param1=vlaue1&param2=value2的部分。

请求发送参数的 4 种方式(请求参数对、路由参数、请求体、Cookie请求头)

  • req.query请求参数对的部分。Object类型。
  • req.params 在URL的路由部分,URL段也可以传递参数。如/:userId/profile中的:/userId。详见https://www.expressjs.com.cn/guide/routing.htmlRoute parameters部分。
  • req.body 请求体request body,常用语post方法的请求参数传递。
  • req.cookies 设置名为Cookie的请求头即可。

当然req还有更多的成员。
用到再研究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章