Express
一. 安装Express
npm init -y
npm install express -g
二.启动Express
1.基础使用
在该项目文件夹创建app.js,并使用编辑器打开,输入以下代码并在控制台/终端输入 node app.js,启动当前服务器
//引入express模块
const express = require("express")
//创建express实例
const app = express()
//启动express实例,并部署在当前服务器端口号3000
app.listen(3000,()=>{
console.log("项目启动")
})
2.热更新
下载nodemon模块实现热更新,下载完毕后可以在控制台输入
nodemon app.js
即可实现热更新
npm install nodemon -D //-D代表着下载到开发环境,打包时不会将nodemon打入
我们可以在package.json里的scripts对象中添加
scripts:{
"dev":"nodemon app.js"
}
这样我们执行npm run dev
就相当于nodemon app.js
,实现了统一
三.路由
1.基础使用
浏览器访问localhost:3000/浏览器上即显示
路由 / 已返回数据
//引入express模块
const express = require("express")
//创建express实例
const app = express()
app.get("/",(req,res)=>{
res.send("路由 / 已返回数据")
})
//启动express实例,并部署在当前服务器端口号3000
app.listen(3000,()=>{
console.log("项目启动")
})
2.Query传参
形似localhost:3000/user?name=jack
app.get("/user",(req,res)=>{
//通过req.query.name拿到数据
const {name} = req.query
console.log("名字是 ",name)
res.send(name)
})
3.Params传参
形似localhost:3000/user/123,常用于删除
app.get("/user/:id",(req,res)=>{
//通过req.params.id
const {id} = req.params
console.log("用户id是 ",id)
res.send(id)
})
4.Body传参
常用于除get请求的其他请求.如post
想要接收到req.body参数,使用中间件express.json()
使用方式
app.use(express.json())
app.post("/user",(req,res)=>{
const {name} = req.body
res.send(name)
})
5.创建子路由
如果将所有请求全部挂载到app上,那么程序是臃肿的,不好维护的,那么就可以创建子路由了
-
在该项目创建文件夹routes
-
新建user.js,用来管理/user路径下的请求
-
//user.js中 const express = require("express") const router = express.Router() router.get("/",(req,res)=>{ res.send("user路由启动") }) //导出user路由 modules.exports = router
-
//app.js const userRouter = require("./routes/user.js") //将userRouter映射到/user上 app.use("/user",userRouter)
在浏览器中是无法发送post请求的,这时我们需要接口调试软件,如postman
四.中间件
简单来说是可以预处理到达路由之前的请求,包括但不限于在req,res加上自己写的方法
这些方法在路由层可直接调用
1.基础使用
app.use(function(req,res,next){})
app.use((req,res,next)=>{
//所有请求都会经过此中间件
console.log("最简单的中间件")
//必须要next(),否则访问此接口将会一直挂起,表现为浏览器访问一直转圈
next()
})
运行访问即可在终端。控制台输出
最简单的中间件
2.应用级中间件
作用在全部路由上的中间件,相当于作用在一级路由
app.use((req,res,next)=>{
//res.xxx = 一系列加工函数
console.log("应用级中间件")
next()
})
或者是
const appMid = (req,res,next)=>{
console.log("应用级中间件")
next()
}
app.get("/",appMid,(req,res)=>{
res.send("访问一级路由")
})
3.路由级中间件
作用在子路由上的中间件,只会绑定在express.Router()的实例对象(子路由)
//express.Router()方法产生的路由实例对象
//作用在router整个路径上的中间件
router.use((req,res,next)=>{
//res.xxx = 一系列加工函数
console.log("路由级中间件")
next()
})
或者是
const routerMid = (req,res,next)=>{
console.log("路由级中间件")
next()
}
//只会作用在router路径下的/下的中间件
router.get("/",routerMid,(req,res)=>{
res.send("访问二级路由")
})