一、express-server

express 是 node.js 的框架,用于快速开发服务端程序,让服务端的代码组织起来更清晰
安装 express:npm install express —save

  1. 导入 express
  1. let express = require('express');
  2. let bodyParser = require('body-parser'); // 用来解析 post 请求传递的数据的中间件
  1. 创建服务
  1. let app = express();
  1. 提供静态资源服务
  1. app.use(express.static(__dirname)); // 使用静态资源中间件
  2. app.use(bodyParser.urlencoded({extended: false})); // body-parser 处理 form-data 的 post 数据
  3. app.use(bodyParser.json()); // 使用 body-parser 中间件处理 json 的 post 的数据,处理完会挂载到 req.body 上
  1. 处理 ajax 接口,根据不同的 pathname 做不同的处理,这种机制叫做路由
  1. app.get('/api/getList', (req, res) => {
  2. // req 是请求对象
  3. // res 是响应对象
  4. // 这个 req 和 res 是经过 express 包装过的对象,和原生 node.js 的 req 和 res 不太一样;
  5. // console.log(req.query); req.query 是 get 请求问号传参的对象
  6. // req.headers 请求头信息
  7. // console.log(req.path); req.path 请求路径
  8. // console.log(req.host); req.host 主机名(域名)
  9. res.send({
  10. code: 0,
  11. data: {a: 1, b: 2},
  12. msg: 'ok'
  13. });
  14. });
  1. 处理 post 请求的接口
  1. app.post('/api/testPost', (req, res) => {
  2. console.log(req.body); // 使用 body-parser 中间件以后,通过 req.body 获取 post 的数据;
  3. res.send({
  4. code: 0,
  5. data: {post: true},
  6. msg: 'ok'
  7. });
  8. });
  9. app.listen(8000, () => console.log('port 8000 is on'));

二、express-动态路由

  1. let express = require('express');
  2. let bodyParser = require('body-parser');
  3. let app = express();
  4. app.use(express.static(__dirname)); // 使用静态资源中间件
  5. app.use(bodyParser.urlencoded({extended: false}));
  6. app.use(bodyParser.json());
  7. app.get('/api/getList', (req, res) => {
  8. res.send({
  9. code: 0,
  10. data: {a: 1, b: 2},
  11. msg: 'ok'
  12. });
  13. });
  14. // 动态路由:就是接口有一部分不再是死的了;带有:的就是动态的;将来这一部分是由客户端传递的
  15. app.get('/order/details/:orderId', (req, res) => {
  16. // console.log(req.params); {orderId: 具体的值}
  17. // req.params 是动态路由的值,是一个对象,对象中的属性是动态路由冒号后面的,值是客户端请求的时候传递的啥,这里收到的就是啥;例如客户端请求:/order/details/123 req.params 就是 {orderId: 123}
  18. // 作用:简化 url,客户端不用再问号传参了;
  19. res.send({
  20. code: 0,
  21. data: req.params,
  22. msg: 'ok'
  23. })
  24. });
  25. // app.param() 方法: 拦截带有指定动态路由的请求
  26. app.param('orderId', (req, res, next) => {
  27. console.log(req.params);
  28. // 拦截一般都是对动态路由做校验,如果校验通过,要执行next() 放行;否则客户端的请求一直处于挂起状态;如果校验失败,我们可以通过 res.send 提前结束响应;
  29. // 验证 orderId 必须是纯数字
  30. if (/^\d+$/.test(req.params.orderId)) {
  31. next();
  32. } else {
  33. res.send({
  34. code: 1,
  35. data: req.params,
  36. msg: 'no ok'
  37. })
  38. }
  39. });
  40. app.listen(8000, () => console.log('port 8000 is on'));

三、express 中间件

中间件:middleware, 一个在请求之后响应之前被调用的函数;中间件可以访问请求对象和响应对象;一般都是有某些固定功能,如 express 静态资源服务中间件;或者使用中间件做某些拦截,例如登录状态的拦截;

  1. // app.use() 使用中间件的方法;
  2. let express = require('express');
  3. let bodyParser = require('body-parser'); // 用来解析 post 请求传递的数据的中间件
  4. // 创建服务
  5. let app = express();
  6. app.use(function (req, res, next) {
  7. // req 是请求对象;可以向 req 上面扩展东西;
  8. // res 响应对象
  9. // next 交出控制权,把请求交给下一个中间件或者交给真正响应这个请求的函数;
  10. console.log(1);
  11. req.now = '该下课了'; // 在前面的中间件扩展内容,后面中间件可以获取这个属性
  12. next(); // next() 把请求交给下一个中间件,或者真正响应这个请求的程序;如果不 next,请求一直处于被挂起的状态;
  13. });
  14. app.use(function (req, res, next) {
  15. // console.log(2);
  16. console.log(req.now);
  17. res.send({
  18. where: '第二个中间件'
  19. }); // 在中间件中可以提前结束响应
  20. });
  21. app.get('/api/getList', function (req, res) {
  22. console.log(3);
  23. });
  24. app.listen(8000, () => console.log('port 8000 is on'));