express安装及简单应用
在这里首先第一个问题需要被提出,什么是express呢?它的作用是什么呢?express是关于node的一个框架,在其内部集成了很多的方法以及中间件可使我们更加容易的去实现整个项目的路由管理 登录 日志存储 安全性等功能的实现。废话不多说直接进入接下来需要进行学习的点:
1. express的安装 2.express的目录介绍 3.express的简单应用实例
1.express安装
首先新建一个文件夹然后运行,之后使用npm install express-generator -g
接着使用express express-test express代表初始化一个express项目 后面则表示项目的名称
接着进入创建好的文件中 使用npm install来安装脚手架工具中所需要的依赖包
然后就是安装cross-dev 以及nodemon 来实时的监控文件的更改 然后在package.josn中去配置指令
"dev" : "cross-dev NODE_ENV=dev nodemon ./bin/www.js"
2.express的目录介绍
在express官方所给的脚手架中,有两个文件夹有views,里面存放的文件是以.jade结尾,在这里主要存储的是视图层
部分的代码逻辑 ,还有pubic 在这里存放的文件主要是js Image 样式表等静态的文件 。express被使用之初的目的就是
用于开发前后端,但是随着前后台分离的思想的产生,在这里我们不需要管这个两个文件夹,只需要将其他处理server
端的文件夹中的内容做好即可。
bin目录,在这个目录下,还有一个www的文件,该文件是一个入口文件,其涉及到端口号,错误监听等信息
的检测
routes目录用于处理路由
app.js各种逻辑的实现部分
以下部分包括app.js中所涉及到的中间件的含义
1. http-errors 用于对错误做出处理,更好的增加用户的体验
2. express 在本节所说的一个工具
3. path node 中自己定义的一个用户获取路径的库
4. cookie-parser 对cookie做出路由的处理
5. morgan 记录日所用的一个中间件
6. indexRouter usersRouter 对于路由的处理
7.所对应的app.use(express.json()) app.use(express.urlencoded({ extended: false }));对于数据的处理
前者用于将数据的形式转化为json 后者则是对于其他形式的数据做出一个处理
8.app.use(cookieParser()) 对于路由去做出一个处理
9. app.use('/', indexRouter); app.use('/users', usersRouter); 两者都是对于路由的处理,不同之处在于其
处理的路由不同,两者所表示的都是父级路由,在与之对应的路由文件夹中所对应的则是其子级路由所对应的位置
在这个框架中其处理路由的方式是首先确定路由的传入方式,然后再是对于路径的处理,最后则返回一个函数,
用来处理此路由所返回的结果
下面就举例说一个实际的例子来简单说明express的应用首先看代码:
const express = require('express');
//本次http请求实例
const app = express();
app.use((req ,res ,next ) => {
console.log('请求开始。。。。。', req.method , req.url );
next();
})
app.use((req ,res , next) => {
//假设在处理cookie
req.cookie = {
uerId : '5465sh'
}
next();
})
app.use((req ,res ,next) => {
//假设处理 post data
//异步处理
setTimeout(() => {
req.body = {
a: 12346,
b: "dhsh"
}
next();
})
})
app.use('/api',(req ,res ,next) => {
console.log('处理 api 路由。。。。');
next();
})
app.get('/api',(req ,res ,next) => {
console.log('处理 get api 路由....');
next();
})
app.post('/api',(req ,res ,next) => {
console.log('处理 post api 路由....');
next();
})
//模拟登录验证:
const loginCheck = (req ,res ,next) => {
setTimeout(() => {
console.log('模拟登录验证失败');
res.json({
erron: -1,
msg: '登录失败'
})
//console.log('登录验证成功')
//只有登录成功之后才会去执行next()
//next()
})
}
app.get('/api/get-cookie',loginCheck,(req ,res ,next) => {
console.log('deal /api/get-cookie');
res.json({
erron: 0,
data: req.cookie
});
})
app.post('/api/get-post-data',(req ,res ,next) => {
console.log('deal /api/get-post-data');
res.json({
erron: 0,
data: req.body
})
})
app.use((req ,res ,next) => {
console.log('deal 404 not found');
res.json({
erron: -1,
msg: '404 not found'
})
})
//listen 3000 port
app.listen(3000,() => {
console.log('server is running on 3000 port');
})
在上面的这个实际例子中,主要用使用了app.use()及中间件的使用在app.use()中可以传入多个参数,当一个参数只有(req,res,next) => {}时,在里面写执行的逻辑即可,在通常情况下一个参数写的都是对于cookie与session值的写入,当app.use()中传入两个参数大多时,第一个参数都是对于请求方式,第二个参数(req,res,next) => {}写的就是对于处理该请求的数据的处理。在里面需要注意的就是next参数,只有执行next()方法后才会去执行后面的app.use()方法。最后就是app.listen()用于监听端口变化。在这里只是简单的介绍了express中的中间件的使用方式,对于大多的情况都适用。