Node.js学习笔记_No.06

Express

Express的作用和Node.js内置的http模块类似,是专门用来创建Web服务器的。
常见的两种服务器
Web网站服务器:专门对外提供Web网页资源的服务器
API接口服务器:专门对外提供API接口的服务器。


创建基本的服务器
//1. 导入express
const express = require('express')

//2. 创建web服务器
const app = express()

//4. 监听客户端的GET和POST请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
    //调用express提供的res.send()方法,向客户端响应一个JSON对象
    res.send({
        name: 'zs',
        age: 20,
        gender: '男'
    })
})
app.post('/user', (req, res) => {
    //调用express提供的res.send()方法,向客户端响应一个文本字符串
    res.send('请求成功')
})

//获取URL中携带的查询参数
app.get('/', (req, res) => {
    //通过 req.query 可以获取到客户端发送来的 查询参数
    //注意:默认情况下,req.query 是一个空对象
    console.log(req.query)
    res.send(req.query)
})

//获取URL中的动态参数(:动态参数)
app.get('/user/:id/:username', (req, res) => {
    //req.params 是动态匹配到 URL 参数,默认也是空对象
    console.log(req.params)
    res.send(req.params)
})

//3. 启动 web 服务器
app.listen(80, () => {
    console.log('express server runnning at http://127.0.0.1')
})

托管静态资源

express.static():创建一个静态资源服务器

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

如果要托管多个静态资源目录,请多次调用express.static()函数

app.use(express.static('public'))
app.use(express.static('files'))
挂在路径前缀

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

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

此时就可以通过带/public前缀地址来访问public目录的文件了


nodemon

该工具能监听项目文件的变动,当代码被修改后,nodemon会自动帮我们重启项目,方便开发和调试

npm install -g nodemon

路由

广义上,路由是映射关系
Express 中的路由指客户端的请求服务器处理函数之间的映射关系。
EXpress中的路由由3部分组成,分别是请求的类型、请求的URL地址处理函数

app.METHOD(PATH, HANDLER)

路由的使用
把路由挂载在服务器实例上

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

//挂载路由
app.get('/', (req, res) => {
    res.send('hello world')
})

app.post('/', (req, res) => {
    res.send('Post Request')
})


app.listen(80, () => {
    console.log('http://127.0.0.1')
})

模块化路由
为方便对路由进行模块化管理,Express不建议将路由直接挂载到app上,而是推荐路由抽离为单独的模块
02模块化路由.js

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

//1. 导入路由模块
const router = require('./03router')
//2. 注册路由模块
/* app.use(router)*/
app.use('/api', router) //添加前缀,类似于托管静态资源,为静态资源统一挂载访问前缀一样

//注意:app.use() 函数的作业,就是来注册全局中间件

app.listen(80, () => {
    console.log('http://127.0.0.1')
})

router.js

//路由模块
//1. 导入 express
const express = require('express')
//2. 创建路由对象
const router = express.Router()

//3. 挂载具体的路由
router.get('/user/list', (req, res) => {
    res.send('Get user list')
})

router.post('/user/add', (req, res) => {
    res.send('Add')
})

//4. 向外到处路由对象
module.exports = router

Express中间件

本质是function处理函数,格式如下

app.get('/', fuction(req, res, next){
	next();
})
调用流程

当一个请求到达Express的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理
在这里插入图片描述
next函数:实现多过中间件连续到用的关键,他表示把流转关系转交给下一个中间件路由


全局生效的中间件

客户端发起任何请求,到达服务器后,都会触发的中间件

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

//定义一个最简单的中间件函数
const mw = function (req, res, next) {
    console.log('这是最简单的中间件函数')
    //把流转关系,转交给下一个中间件或路由
    next()
}

//将 mw 注册为全局生效的中间件
app.use(mw)

app.get('/', (req, res) => {
    console.log('调用了这个‘/’路由')
    res.send('Home page.')
})
app.get('/user', (req, res) => {
    console.log('调用了这个‘/user’路由')
    res.send('User page.')
})

app.listen(80, () => {
    console.log('http://127.0.0.1')
})
//简化形式
app.use(function (req, res, next) {
    console.log('这是一个最简单的中间件函数')
    next()
})

中间件作用:多个中间件之间,共享同一份reqres,基于该特性,可以在上游的中间件统一为req或res对象添加自定义的属性或方法,供下游的中间件或路由使用。


局部生效的中间件

不使用app.use()定义的中间件,叫做局部生效的中间件

//导入express模块
const express = require('express')
//创建express的服务器实例
const app = express()

//1. 定义中间件函数
const mw1 = (req, res, next) => {
    console.log('调用了局部生效的中间件')
    next()
}

//2. 创建路由
app.get('/', mw1, (req, res) => {//mw1就是局部中间件,只在当前路由生效,不会影响其他路由
    res.send('Home pages')
})

app.get('/user', (req, res) => {
    res.send('User pages')
})

//调用app.listen方法,指定端口号并启动web服务器
app.listen(80, function () {
    console.log('Express server running at http://127.0.0.1')
})

定义多个局部中间件

//两种写法都可
app.get('/', mw1, mw2, (req, res) => {res.send('Home page.')})
app.get('/', [mw1, mw2], (req, res) => {res.send('Home page.')})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值