Express
是基于Node.js
平台,快速、开放、极简的web
开发框架
Express
的作用和node
的内置模块http
的功能有些类似,都是用来创建Web服务器的
Express
的本质:就是一个第三方模块,提供快速创建Web服务器的功能
Express的目的
方便快捷的创建Web
网站的服务器或API
接口服务器
**Web**
网站服务器:专门对外提供Web
网页资源的服务器。 (前后端混合时做的,现在基本是前后端分离)**API**
接口服务器:专门对外提供API
接口的服务器。 (现在Express的主要使用目的)
1. 基本使用
安装
npm i express
创建基本的Web服务器
// 导入exprss模块
const express = require('express')
//创建web服务器
const app = express()
//调用 app.listen(端口号,启动后的回调函数),来启动服务器
app.listen(8080,()=>{
console.log('server start success is http://127.0.0.1:8080')
})
监听GET和POST请求,并影响客户端
监听GET
请求
通过app.get()
的方法来监听客户端的GET请求
//参数1 :客户端请求的URL地址
//参数2 :请求对应的处理函数
// req:请求对象(包含了与请求相关的属性和方法)
// res:响应对象(包含了与响应相关的属性和方法)
app.get('请求URL',(req,res)=>{ /*处理函数*/ })
监听POST
请求
通过app.post()
方法,来监听客户端的POST请求
//参数1 :客户端请求的URL地址
//参数2 :请求对应的处理函数
// req:请求对象(包含了与请求相关的属性和方法)
// res:响应对象(包含了与响应相关的属性和方法)
app.post('请求的URL',(req,res)=>{ /*相关处理函数*/ })
通过res.sen()
方法发送处理好的内容给客户端
把响应的内容发送给客户端
app.get ('/user',(req,res)=>{
//向客户端发送JSON 对象
res.send({name:'yc',age:23,gender:'未知'}) //请求成功时发送给客户端的数据
})
app.post('/user',(req,res)=>{
//向客户端发送文本内容
res.send('请求已完成')
})
完整代码
// 导入exprss模块
const express = require('express')
//创建web服务器
const app = express()
app.get ('/user',(req,res)=>{
//向客户端发送JSON 对象
res.send({name:'yc',age:23,gender:'未知'}) //请求成功时发送给客户端的数据
})
app.post('/user',(req,res)=>{
//向客户端发送文本内容
res.send('请求已完成')
})
//调用 app.listen(端口号,启动后的回调函数),来启动服务器
app.listen(8080,()=>{
console.log('server start success is http://127.0.0.1:8080')
})
获取URL中的动态参数
通过req.params
对象,可以访问到URL中通过:
匹配到的动态参数
//URL 地址中,可以通过 : 参数名的形式,匹配动态参数值
app.get('/user/:id',(req,res)=>{
//req.params 默认是一个空对象
// 里面存放着通过 :动态匹配的参数值
console.log(req.params.id)
})
补充知识点
/:id
— id 值不是固定的,可以自己定义,例如:/:ids
- 展示到页面中的
id
键,是自定义的变量值 - 参数可以有多个,例如:
/:ids/:name
这样获得的params
可以是req.params.ids
和req.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‘) })
<a name="c471d1e4"></a>
# 2. 托管静态资源
`express`提供一个非常好用的函数:`express.static()`,通过这个函数可以非常方便的创建一个静态服资源务器
例如:通过这个函数将目录下下的图片、CSS、JS对外开发访问
```javascript
const express = require('express')
const app = express()
// 在这里,调用 express.static() 方法,快速的对外提供静态资源
app.use(express.static('public'))
app.use(express.static('static'))
app.listen(8080, () => {
console.log('server start success is http://127.0.0.1:8080')
})
现在,你就可以访问 public 目录中的所有文件了:
- 访问图片资源:http://localhost:3000/images/bg.jpg
- 访问
css
资源:http://localhost:3000/css/style.css - 访问
js
资源:http://localhost:3000/js/login.js
注意:Express
在指定的静态目录中查找文件,并对外提供资源的访问路径,因此,存放静态文件的目录名不会出现在URL
中
托管多个静态资源目录
需要多次调用express.static()
函数来托管多个静态资源,访问静态资源时根据添加顺序来查找所需文件
挂载路径前缀
如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下方式
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
获取当前请求的方式:GET
、POST
、PUT
req.query
这个属性获取的是查询字符串?
后面拼接的参数,如果没有查询字符串,它就是空对象{}
// GET/search?name=yc&frients=song&otherfrient=wyq
req.query.name //=> yc
req.query.frient //=> song
req.body
这里面保存的是**post**
请求上传的数据,经常用于将上传的数据再传回客户端来表示上传数据是否成功
app.post('upload',(req,res,next)=>{
console.log(req.body) //将post请求上传的数据显示给客户端
})
req.params
// /user/:name/:age
// GET/user/yc/24
req.params.name //yc
req.params.age //24
获得动态参数