安装
npm install express -S
使用
let express = require('express');
//2.创建server服务器应用程序
let app = express();
//响应
app.get('/',(req,res)=>{
res.send('hello Express');
});
//还有对应的app.post()方法,处理post请求
app.use((req,res)=>{
//处理未分配路由的地方
})
app.listen(3000,()=>{
console.log('服务启动成功')
});
说明:
- 通过app.get()方法处理get请求,第一个是用户请求路径
- 通过app.post()方法处理post请求
设置静态资源目录(外部可以直接访问的数据)
app.use('/public/',express.static('./public/'))
使用127.0.0.1:3000/public/index.htmlapp.use('/a',express.static('./public'))
必须使用127.0.0.1:3000/a/index.html 才能访问
通常这样使用
app.use('/public/',express.static(path.join(__dirname,'./public/')))
app.use('/node_modules/',express.static(path.join(__dirname,'./node_modules/')))
由于在node中,相对路径不是很可靠,所以采用path.join()将相对路径变为绝对路径
Express中表单GET方式提交数据获取
app.get('/',(req,res)=>{
console.log(req.query)
});
通过req.query获取表单提交数据
Express中表单POST方式提交数据获取
需要安装插件:
- 安装
npm i body-parser --save
- 配置
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
- 使用
app.post('/post',(req,res)=>{
console.log(req.body);
});
说明:
- 配置该插件必须放在 配置路由之前
- 配置好后 req身上会有多出一个属性 body 通过该属性即可拿到数据
express-session插件
在Express中,默认不支持session与cookie 所以需要第三方中间件->express-session
安装: npm i express-session --save
导入: let session = require('express-session')
配置:
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
说明:
secret->加密字符串与原本机密字符串拼接后再加密 加密的字符串是 keyboard cat(自定义)
resave ->特殊
saveUninitialized ->无论是否使用session,都默认分配session
使用:req.session.key = value
默认session是内存存储,服务器重启即消失.实际上使用会持久化存储
路由抽离
将请求的处理抽离到router.js单独的文件
首先在router.js文件中
let fs = require('fs');
let express = require('express');
//1.创建路由容器
let router = express.Router();
//2.将路径挂载到router路由容器中
router.get('/students',(req,res)=>{
if (err){
return console.log("读取db.json有错");
}
})
});
router.get('/students/new',(req,res)=>{
});
router.post('/students/new',(req,res)=>{
});
//3.最后将router导出
module.exports = router;
在app.js(创建服务的文件)中,进行注册
//引入文件
let router= require('./router');
//将路由容器挂载到app上,一般放在最后面
app.use(router)
中间件(middleware)
概念:许多数据获取的方式很繁琐,然后需要经过一系列加工后才能方便使用,而且有可能加工之间有顺序.在使用数据之前,需要许多中间件来方便获得数据
中间件本质:处理请求的,是一个方法,该方法接收三个参数:
request 请求对象
response 响应对象
next next是一个函数 使用 next() 目的是进入下一个中间件(所以与使用顺序有关系)
next的下一个中间件并不是紧挨着的中间件,而是调下一个相匹配的中间件
如果一个匹配的都没有,则默认输出 Cannot Get/路径
Express中的中间件
express中的中间件分为三类:
- 不关心任何请求路径和请求方法(post/get/…)的中间件(任何请求都会进入这个中间件) 比如:
app.use((req,res,next)=>{
console.log('任何请求都会打印')
next()调用下一个中间件
})
- 关心请求路径的中间件(以什么什么路径开头的中间件)
app.use('/a',(req,res,next()=>{
console.log(req.url)
}))
//限制以/a开头的路径
- 严格匹配请求方法和路径的中间件,比如:
app.get('/',(req,res,next)=>{})
app.post('/',(req,res,next)=>{})
使用:由于,中间件之间是运行一个个匹配的中间件中的代码.所以在某个req身上添加属性 req.key = value 下一个中间件也可以拿到
配置全局错误处理:
只要有一个中间件在next方法中传入err参数 -> if(err) return next(err)
,则会跳到四个参数的中间件里面->四个参数很重要 必须要四个参数 不然传递的三个参数会被默认为res,req,next
app.use((err,req,res,next)=>{
res.status(500).send(err.message)
})
当发生错误的时候使用next()传递一个err对象,就会找到四个参数的错误处理中间件,方便进行错误集中处理
来源:CSDN
作者:睡神大人
链接:https://blog.csdn.net/weixin_42452726/article/details/104224937