express

467 阅读3分钟

一、express是什么?

express是node的一个框架,使用框架可以快速开发服务端程序,处理客户端请求;让后端代码更加清晰

使用 express

  1. 安装express
npm install express --save
  1. 导入express
let express = require('express');
let bodyParser = require('body-parser');
  1. 使用express创建server
let app = express();
  1. 使用中间件
app.use(express.static(__dirname)); // 静态资源服务
app.use(bodyParser.json()); // 解析POST请求的数据,并且挂载到req的body上
  1. 配置路由 (接口)
  • 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('请求来了');
});
  1. 监听端口号
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'));