express

138 阅读3分钟

官网 安装 Express - Express 中文文档 | Express 中文网 (expressjs.com.cn)

image.png

image.png

image.png

image.png

第二步:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});

image.png

启动服务器:node app.js

访问localhost:3000 可以访问

实现一个简单的get接口

const express = require('express');
const app = express();

app.get('/login', (req, res) => {
    res.setHeader('Access_Control_Allow_Origin',"*") // *表示都可以跨域访问
    res.send({
        code:200,
        message:'成功'
    });
});

app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});


获取查询字符串

什么是查询字符串? url地址后面的这些:

image.png

使用req.query获取查询字符串

const express = require('express')

const app = express()
app.listen(3000, () => {
  console.log('服务器启动成功了')
})
app.get('/login', (req, res) => {
  // 允许该接口跨域访问
  res.setHeader('Access-Control-Allow-Origin', '*') // *表示都可以跨域访问
  console.log(req.query)
  const {username, password} = req.query
  if(username === 'admin' && password === '123456') {
    res.send({
      code: 200,
      message: '成功'
    })
  } else {
    res.send({
      code: 400,
      message: '用户名或密码错误'
    })
  }
})

获取到的查询字符串:

image.png

获取动态参数

url/:id/:name/:age :后面的就叫动态参数 使用req.params获取动态参数

app.get('/getUser/:id', (req, res) => {
  // 允许该接口跨域访问
  res.setHeader('Access-Control-Allow-Origin', '*')
  console.log(req.params)
  res.send({
    id: req.params.id,
    name: 'zs',
    age: 10

  })
})

image.png

实现post请求

  1. 处理所有的options请求
app.options('*', (req, res) => {
  // 允许CORS跨域的域名
  res.setHeader('Access-Control-Allow-Origin', '*')
  // 允许CORS跨域的请求方式,默认只有GET,POST
  res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,DELETE')
  // 允许CORS跨域请求的请求头
  res.setHeader('Access-Control-Allow-Headers', 'content-type')
  res.send(null)
})

  1. 发送post请求
app.post('/login', (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*')
  res.send({
    code: 200,
    message: '登陆成功'
  })
})


  1. 如果要拿到post请求的请求体

    • 使用req.body
    • 必须使用一个**内置的中间件 **express.json()
app.use(express.json())
...
...
app.post('/login', (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*')
  console.log(req.body)
  res.send({
    code: 200,
    message: '登陆成功'
  })
})

服务器端接收不同类型的请求体,使用的方式是不同的

  • urlencoded ---> app.use(express.urlencoded({extended: false}));

  • application/json ---> app.use(express.json()); -- 没有演示

  • form-data ---> 服务器端使用第三方模块处理(multer

间件

image.png

const express = require('express')
const app = express()
// app.use(中间件) // 所有的请求之前都会调用中间件
const middle = function (req, res, next) {
  console.log('我是中间件')
  // 处理完一定要记得调用next
  next()
}
app.use(middle) //此为全局中间价
app.listen(3000, () => {
  console.log('服务器启动了')
})

app.get('/login', (req, res) => {
  res.send('登录')
})
app.get('/user', (req, res) => {
  res.send('用户')
})
app.get('/index', (req, res) => {
  res.send('首页')
})

用中间件解决跨域

const express = require('express')
const app = express()
// app.use(中间件) // 所有的请求之前都会调用中间件
const AllowCrossDomain = function (req, res, next) {
  // 允许CORS跨域的域名
  res.setHeader('Access-Control-Allow-Origin', '*')
  // 允许CORS跨域的请求方式,默认只有GET,POST
  res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,DELETE')
  // 允许CORS跨域请求的请求头
  res.setHeader('Access-Control-Allow-Headers', 'content-type')
  // 处理完一定要记得调用next
  next()
}
app.use(AllowCrossDomain)
app.listen(3000, () => {
  console.log('服务器启动了')
})

app.post('/login', (req, res) => {
  res.send({
    code: 200,
    message: '登陆成功'
  })
})
app.get('/user', (req, res) => {
  res.send('用户')
})
app.get('/index', (req, res) => {
  res.send('首页')
})

cors解决跨域

image.png

jsonp

image.png

express内置的中间件

image.png

application/json post请求是一种HTTP请求方式,其中请求的数据格式为JSON格式。这种请求方式通常用于向服务器提交数据,例如提交表单数据、上传文件等。在请求头中,Content-Type字段的值为application/json,表示请求体中的数据为JSON格式。服务器端需要解析JSON数据,才能正确处理请求

application/x-www-form-urlencoded是常见的web 表单提交方式,参数通常在请求body中以key=value&key=value将键值对的参数用&连接起来方式传递。

image.png

image.png

image.png image.png

Express高级用法和技巧

  1. 使用路由中间件 对于一些大型应用程序来说,路由代码的数量可能很大,这将使代码难以维护。使用路由中间件可以更好地组织和管理路由。下面是一个例子:
// userRoutes.js
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  res.send('Get all users');
});

router.post('/', (req, res) => {
  res.send('Create a user');
});

router.get('/:id', (req, res) => {
  res.send(`Get user by id ${req.params.id}`);
});

router.put('/:id', (req, res) => {
  res.send(`Update user by id ${req.params.id}`);
});

router.delete('/:id', (req, res) => {
  res.send(`Delete user by id ${req.params.id}`);
});

module.exports = router;

然后,我们可以使用该路由中间件来处理用户请求:

// app.js
const express = require('express');
const userRoutes = require('./userRoutes');

const app = express();

app.use('/users', userRoutes);

app.listen(3000, () => console.log('Example app listening on port 3000!'));