一、express是什么?
express是node的一个框架,使用框架可以快速开发服务端程序,处理客户端请求;让后端代码更加清晰
使用 express
- 安装express
npm install express --save
- 导入express
let express = require('express');
let bodyParser = require('body-parser');
- 使用express创建server
let app = express();
- 使用中间件
app.use(express.static(__dirname)); // 静态资源服务
app.use(bodyParser.json()); // 解析POST请求的数据,并且挂载到req的body上
- 配置路由 (接口)
- get请求
app.get('/login', function (req, res) {
console.log(req.query);
res.send(req.headers);
});
- post请求
app.post('/register', function (req, res) {
console.log(req.body);
res.send({
code: 0,
data: {},
msg: 'ok'
})
});
- 无论get还是post请求都会执行
app.all('/api/xyz', function (req, res) {
console.log('请求来了');
});
- 监听端口号
app.listen(8000, () => console.log('启动成功'));
二、使用
// 1. 导入express
let express = require('express');
let bodyParser = require('body-parser');
// 2. 创建一个服务
let app = express();
// 3. 使用静态资源服务中间件
app.use(express.static(__dirname));
app.use(bodyParser.json());
// 4. 配置路由
app.get('/api/login/:id', (req, res) => {
console.log(req.params);
console.log(req.path);
// req.headers 请求头信息
// req.url 请求路径 + 问号传参
// req.path 路径
// req.host 主机名
// req.params 动态路由参数
res.send({
code: 0,
data: null,
msg: 'ok'
});
});
app.post('/api/getList', (req, res) => {
console.log(req.body);
res.send({
code: 0,
data: null,
msg: 'ok'
});
});
app.listen(8000, () => console.log(8000));
三、express动态路由
动态路由是什么?
路由中的某一部分是可以变的,这一部分需要用:标识;如果没有:这一部分就是不可以变的;
获取动态路由的值
在express的请求对象上有一个params属性,这个属性保存了动态路由的值;
let express = require('express');
let bodyParser = require('body-parser');
let app = express();
app.use(express.static(__dirname));
app.use(bodyParser.json());
// 动态路由:路由中的某一部分是可以变的,这一部分需要用:标识;如果没有:这一部分就是不可以变的;
app.get('/order/details/:orderId', (req, res) => {
console.log(req.path); // /order/details/123
console.log(req.params); // { orderId: '123' } 动态路由部分可以在req.params中获取,req.params 是一个对象,其中的属性是在声明路由时冒号后面的值;
res.send(req.params);
});
app.listen(8000, (req, res) => console.log(8000));
四、param方法
app.param() 方法用于拦截所有带有id的动态路由,可以访问请求对象req和响应对象res;
let express = require('express');
let bodyParser = require('body-parser');
let app = express();
app.use(express.static(__dirname));
app.use(bodyParser.json());
// app.param 方法用于拦截所有带有id的动态路由,可以访问
app.param('orderId', (req, res, next) => {
console.log(req.params);
if(!/\d+/.test(req.params)) {
res.send('参数错误');
} else {
next(); // 把控制权交给下一个拦截或者真正的路由处理函数响应
}
// 在这个函数中可以访问req和res,可以增加headers或者判断参数合法与否,如果不合法可以提前响应;如果校验结束后要执行next(),
});
app.get('/order/detail/:orderId', (req, res, next) => {
// console.log(req.params);
res.send(req.params)
});
app.listen(8000, () => console.log(8000));
五、中间件 middleware
中间件:可一个访问请求对象和响应对象的函数;
一般中间件都是有固定功能或者实现拦截的
let express = require('express');
let bodyParser = require('body-parser');
let app = express();
app.use(express.static(__dirname));
app.use(bodyParser.json());
// app.use() 方法使用中间件,中间件在请求被服务器接收之后,真正被响应之前被调用
app.use(function (req, res, next) {
// 中间件,只要请求就会被挨个调用;
// 如果在当前中间件中没有结束请求,必须执行next,把控制权交给下一个中间件或者路由响应函数,否则请求一直处于挂起状态;
req.sleep = '睡觉';
next();
});
app.use(function (req, res) {
console.log(req.sleep);
res.send('帅');
});
app.get('/api/test', (req, res) => {
console.log()
});
app.listen(8000, () => console.log('8000'));