一、express-server
express 是 node.js 的框架,用于快速开发服务端程序,让服务端的代码组织起来更清晰
安装 express:npm install express —save
- 导入 express
let express = require('express');
let bodyParser = require('body-parser'); // 用来解析 post 请求传递的数据的中间件
- 创建服务
let app = express();
- 提供静态资源服务
app.use(express.static(__dirname)); // 使用静态资源中间件
app.use(bodyParser.urlencoded({extended: false})); // body-parser 处理 form-data 的 post 数据
app.use(bodyParser.json()); // 使用 body-parser 中间件处理 json 的 post 的数据,处理完会挂载到 req.body 上
- 处理 ajax 接口,根据不同的 pathname 做不同的处理,这种机制叫做路由
app.get('/api/getList', (req, res) => {
// req 是请求对象
// res 是响应对象
// 这个 req 和 res 是经过 express 包装过的对象,和原生 node.js 的 req 和 res 不太一样;
// console.log(req.query); req.query 是 get 请求问号传参的对象
// req.headers 请求头信息
// console.log(req.path); req.path 请求路径
// console.log(req.host); req.host 主机名(域名)
res.send({
code: 0,
data: {a: 1, b: 2},
msg: 'ok'
});
});
- 处理 post 请求的接口
app.post('/api/testPost', (req, res) => {
console.log(req.body); // 使用 body-parser 中间件以后,通过 req.body 获取 post 的数据;
res.send({
code: 0,
data: {post: true},
msg: 'ok'
});
});
app.listen(8000, () => console.log('port 8000 is on'));
二、express-动态路由
let express = require('express');
let bodyParser = require('body-parser');
let app = express();
app.use(express.static(__dirname)); // 使用静态资源中间件
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.get('/api/getList', (req, res) => {
res.send({
code: 0,
data: {a: 1, b: 2},
msg: 'ok'
});
});
// 动态路由:就是接口有一部分不再是死的了;带有:的就是动态的;将来这一部分是由客户端传递的
app.get('/order/details/:orderId', (req, res) => {
// console.log(req.params); {orderId: 具体的值}
// req.params 是动态路由的值,是一个对象,对象中的属性是动态路由冒号后面的,值是客户端请求的时候传递的啥,这里收到的就是啥;例如客户端请求:/order/details/123 req.params 就是 {orderId: 123}
// 作用:简化 url,客户端不用再问号传参了;
res.send({
code: 0,
data: req.params,
msg: 'ok'
})
});
// app.param() 方法: 拦截带有指定动态路由的请求
app.param('orderId', (req, res, next) => {
console.log(req.params);
// 拦截一般都是对动态路由做校验,如果校验通过,要执行next() 放行;否则客户端的请求一直处于挂起状态;如果校验失败,我们可以通过 res.send 提前结束响应;
// 验证 orderId 必须是纯数字
if (/^\d+$/.test(req.params.orderId)) {
next();
} else {
res.send({
code: 1,
data: req.params,
msg: 'no ok'
})
}
});
app.listen(8000, () => console.log('port 8000 is on'));
三、express 中间件
中间件:middleware, 一个在请求之后响应之前被调用的函数;中间件可以访问请求对象和响应对象;一般都是有某些固定功能,如 express 静态资源服务中间件;或者使用中间件做某些拦截,例如登录状态的拦截;
// app.use() 使用中间件的方法;
let express = require('express');
let bodyParser = require('body-parser'); // 用来解析 post 请求传递的数据的中间件
// 创建服务
let app = express();
app.use(function (req, res, next) {
// req 是请求对象;可以向 req 上面扩展东西;
// res 响应对象
// next 交出控制权,把请求交给下一个中间件或者交给真正响应这个请求的函数;
console.log(1);
req.now = '该下课了'; // 在前面的中间件扩展内容,后面中间件可以获取这个属性
next(); // next() 把请求交给下一个中间件,或者真正响应这个请求的程序;如果不 next,请求一直处于被挂起的状态;
});
app.use(function (req, res, next) {
// console.log(2);
console.log(req.now);
res.send({
where: '第二个中间件'
}); // 在中间件中可以提前结束响应
});
app.get('/api/getList', function (req, res) {
console.log(3);
});
app.listen(8000, () => console.log('port 8000 is on'));