文章目錄
環境初始化
利用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
path
是url
去掉請求參數對
的部分。
請求參數對即拼接在URL中的形如?param1=vlaue1¶m2=value2
的部分。
請求發送參數的 4 種方式(請求參數對、路由參數、請求體、Cookie請求頭)
req.query
即請求參數對
的部分。Object
類型。req.params
在URL的路由部分,URL段也可以傳遞參數。如/:userId/profile
中的:/userId
。詳見https://www.expressjs.com.cn/guide/routing.html的Route parameters
部分。req.body
請求體request body
,常用語post
方法的請求參數傳遞。req.cookies
設置名爲Cookie
的請求頭即可。
當然req
還有更多的成員。
用到再研究。