Express是基于Node.js平台,快速、开放、极简的web开发框架

Express的作用和node的内置模块http的功能有些类似,都是用来创建Web服务器的

Express的本质:就是一个第三方模块,提供快速创建Web服务器的功能

Express的目的

方便快捷的创建Web网站的服务器或API接口服务器

  • **Web** 网站服务器:专门对外提供 Web 网页资源的服务器。 (前后端混合时做的,现在基本是前后端分离)
  • **API** 接口服务器:专门对外提供 API 接口的服务器。 (现在Express的主要使用目的)

1. 基本使用

安装

  1. npm i express

创建基本的Web服务器

  1. // 导入exprss模块
  2. const express = require('express')
  3. //创建web服务器
  4. const app = express()
  5. //调用 app.listen(端口号,启动后的回调函数),来启动服务器
  6. app.listen(8080,()=>{
  7. console.log('server start success is http://127.0.0.1:8080')
  8. })

监听GET和POST请求,并影响客户端

监听GET请求

通过app.get()的方法来监听客户端的GET请求

  1. //参数1 :客户端请求的URL地址
  2. //参数2 :请求对应的处理函数
  3. // req:请求对象(包含了与请求相关的属性和方法)
  4. // res:响应对象(包含了与响应相关的属性和方法)
  5. app.get('请求URL',(req,res)=>{ /*处理函数*/ })

监听POST请求

通过app.post()方法,来监听客户端的POST请求

  1. //参数1 :客户端请求的URL地址
  2. //参数2 :请求对应的处理函数
  3. // req:请求对象(包含了与请求相关的属性和方法)
  4. // res:响应对象(包含了与响应相关的属性和方法)
  5. app.post('请求的URL',(req,res)=>{ /*相关处理函数*/ })

通过res.sen()方法发送处理好的内容给客户端

把响应的内容发送给客户端

  1. app.get ('/user',(req,res)=>{
  2. //向客户端发送JSON 对象
  3. res.send({name:'yc',age:23,gender:'未知'}) //请求成功时发送给客户端的数据
  4. })
  5. app.post('/user',(req,res)=>{
  6. //向客户端发送文本内容
  7. res.send('请求已完成')
  8. })

完整代码

  1. // 导入exprss模块
  2. const express = require('express')
  3. //创建web服务器
  4. const app = express()
  5. app.get ('/user',(req,res)=>{
  6. //向客户端发送JSON 对象
  7. res.send({name:'yc',age:23,gender:'未知'}) //请求成功时发送给客户端的数据
  8. })
  9. app.post('/user',(req,res)=>{
  10. //向客户端发送文本内容
  11. res.send('请求已完成')
  12. })
  13. //调用 app.listen(端口号,启动后的回调函数),来启动服务器
  14. app.listen(8080,()=>{
  15. console.log('server start success is http://127.0.0.1:8080')
  16. })

获取URL中的动态参数

通过req.params对象,可以访问到URL中通过:匹配到的动态参数

  1. //URL 地址中,可以通过 : 参数名的形式,匹配动态参数值
  2. app.get('/user/:id',(req,res)=>{
  3. //req.params 默认是一个空对象
  4. // 里面存放着通过 :动态匹配的参数值
  5. console.log(req.params.id)
  6. })

补充知识点

  • /:id — id 值不是固定的,可以自己定义,例如: /:ids
  • 展示到页面中的 id 键,是自定义的变量值
  • 参数可以有多个,例如: /:ids/:name 这样获得的params可以是req.params.idsreq.params.name ```javascript const express = require(‘express’) const app = express()

// 注意:这里的 :id 是一个动态的参数 app.get(‘/user/:id’, (req, res) => { // req.params 是动态匹配到的 URL 参数,默认也会是一个空对象 console.log(req.params) res.send(req.params) })

app.listen(8080, () => { console.log(‘server start success is http://127.0.0.1:8080‘) })

  1. <a name="c471d1e4"></a>
  2. # 2. 托管静态资源
  3. `express`提供一个非常好用的函数:`express.static()`,通过这个函数可以非常方便的创建一个静态服资源务器
  4. 例如:通过这个函数将目录下下的图片、CSS、JS对外开发访问
  5. ```javascript
  6. const express = require('express')
  7. const app = express()
  8. // 在这里,调用 express.static() 方法,快速的对外提供静态资源
  9. app.use(express.static('public'))
  10. app.use(express.static('static'))
  11. app.listen(8080, () => {
  12. console.log('server start success is http://127.0.0.1:8080')
  13. })

现在,你就可以访问 public 目录中的所有文件了:

  1. 访问图片资源:http://localhost:3000/images/bg.jpg
  2. 访问 css 资源:http://localhost:3000/css/style.css
  3. 访问 js 资源:http://localhost:3000/js/login.js

注意:Express在指定的静态目录中查找文件,并对外提供资源的访问路径,因此,存放静态文件的目录名不会出现在URL

托管多个静态资源目录

需要多次调用express.static()函数来托管多个静态资源,访问静态资源时根据添加顺序来查找所需文件

挂载路径前缀

如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下方式

  1. app.use('/public',express,static('public'))

如果想显示静态资源的目录,可以将目录加到路径前缀里

可以通过带有 /public 前缀地址来访问 public 目录中的文件了:http://localhost:3000/public/images/kitten.jpg

http://localhost:3000/public/css/style.css

http://localhost:3000/public/js/app.js

也可以通过前缀访问多个静态资源里不同文件夹内的同名文件

3. 常用Express的API

req.method

获取当前请求的方式:GETPOSTPUT

req.query

这个属性获取的是查询字符串?后面拼接的参数,如果没有查询字符串,它就是空对象{}

  1. // GET/search?name=yc&frients=song&otherfrient=wyq
  2. req.query.name //=> yc
  3. req.query.frient //=> song

req.body

这里面保存的是**post**请求上传的数据,经常用于将上传的数据再传回客户端来表示上传数据是否成功

  1. app.post('upload',(req,res,next)=>{
  2. console.log(req.body) //将post请求上传的数据显示给客户端
  3. })

req.params

  1. // /user/:name/:age
  2. // GET/user/yc/24
  3. req.params.name //yc
  4. req.params.age //24

获得动态参数

4.mock data

其他

image.png
image.png
image.png

image.png
image.png