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還有更多的成員。
用到再研究。

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