文章目录
环境初始化
利用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
还有更多的成员。
用到再研究。