一、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'));
