nodemon
在编写node.js文件时,如果频繁改动js文件,就需要手动close掉,然后再重新启动,下载nodemon,可以监听项目的改动,帮我们重启项目
express学习
什么是express?
官方概念:Express是基于Node.js平台,快速、开放、极简的web开发框架
通俗的讲:Express和Node.js内置的http模块一样,是专门用来创建web服务器的
本质:是一个第三方包,快速创建web服务器
安装express:npm i express
创建一个express服务
// 导入express
const express = require('express')
// 创建web服务器
const app = express()
// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})
express处理GET\POST请求,以及处理参数
// 导入express
const express = require('express')
// 创建web服务器
const app = express()
// 监听客户端的GET请求
app.get('/user', (req, res) => {
// req 请求对象
// res 响应对象
// 通过 req.query获取get请求内容
const data = res.query
// 通过 res.send()向客户端响应内容
// 将query参数响应给客户端
res.send(data)
})
// 监听客户端的POST请求
app.post('/user/:id', (req, res) => {
// req 请求对象
// res 响应对象
// 通过 req.params获取post请求内容
const data = res.params
// 通过 res.send()向客户端响应内容
// 将params参数响应给客户端
res.send(data)
})
// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})
express中的路由
为了对路由进行模块化管理,不适宜把所有的路由都挂载在app上
路由文件
// 导入express
const express = require('express')
// 创建路由对象
const router = express.Router()
// 监听客户端的GET请求
router.get('/user', (req, res) => {
res.send('get response')
})
// 监听客户端的POST请求
router.post('/user/:id', (req, res) => {
res.send('post response')
})
// 向外导出路由对象
module.exports = router
主文件
// 导入express
const express = require('express')
// 导入路由模块
const router = require('./router')
// 创建web服务器
const app = express()
// 注册路由模块
// app.use就是来注册全局中间件的
app.use(router)
// 还可以给路由模块添加统一前缀
// /api默认给所有接口添加前缀
app.use('/api',router)
// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})
express中间件
1、当一个请求到达express时,可以连续调用多个中间件,从而对这次请求做预处理
2、express本质是一个函数
全局中间件
1、客户端发起的任何请求,到达服务器之后,都会触发中间件,叫做全局生效的中间件
2、调用app.use(中间件函数)即可生效
3、多个中间件之间共享一份req和res,基于这个特性,可以在中间件中,对req和res做统一的处理
// 导入express
const express = require('express')
// 创建web服务器
const app = express()
// 定义一个中间件函数
const mv = (req, res, next) => {
console.log('这是一个简单的中间件')
next()
}
app.use(mv)
// 定义一个get函数
// 每次调用该函数时都会先调用mv中间件函数
app.get('/', (req, res) => {
res.send('data 内容')
})
// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})
局部中间件
1、不使用app.use()定义的中间件,叫做局部生效的中间件
// 导入express
const express = require('express')
// 创建web服务器
const app = express()
// 定义一个中间件函数
const mv = (req, res, next) => {
console.log('这是一个简单的中间件1')
next()
}
const mv2 = (req, res, next) => {
console.log('这是一个简单的中间件2')
next()
}
// 定义一个get函数
// 每次调用该函数时都会先调用mv中间件函数
app.get('/', mv, mv2, (req, res) => {
res.send('data 内容')
})
app.get('/', [mv, mv2], (req, res) => {
res.send('data 内容')
})
// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})
中间件注意事项
1、一定要在路由之前注册中间件
2、客户端发送过来的请求,可以连续调用多个中间件进行处理
3、执行完中间件之后不要忘记调用next()
4、调用next()之后,不要再写代码
5、连续调用多个中间件,多个中间件之间共享req和res
中间件分类
应用级别中间件:使用app.use、app.get()、app.post()绑定到app实例上的中间件
路由级别中间件:绑定到express.Router()实例上的中间件
错误级别中间件
1、错误级别的中间件专门用来捕获整个项目中发生的异常信息,从而防止项目异常崩溃
2、错误级别的中间件有四个参数,(err, req, res, next)=> {}
express 内置中间件
1、express.static快速托管静态资源的中间件
2、express.json解析JSON格式的请求体数据
3、express.urlencoded解析URL-encoded格式的请求体数据
第三方中间件
跨域
cors相关的响应头
Access-Control-Allow-Origin:允许什么域名访问,需要使用res.setHeader('Access-Control-Allow-Origin', 需要跨域的域名)
Access-Control-Allow-Headers:如果需要设置额外的请求头,需要使用res.setHeader('Access-Control-Allow-Headers', 需要设置的请求头)设置
Access-Control-Allow-Methods:使用res.setHeader('Access-Control-Allow-Methods', 需要设置的请求方法)