Express Node框架

自闭症网瘾萝莉.ら 提交于 2020-02-13 03:43:54

安装

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('服务启动成功')
	});											

说明:

  1. 通过app.get()方法处理get请求,第一个是用户请求路径
  2. 通过app.post()方法处理post请求

设置静态资源目录(外部可以直接访问的数据)

  1. app.use('/public/',express.static('./public/')) 使用127.0.0.1:3000/public/index.html
  2. app.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方式提交数据获取

需要安装插件:

  1. 安装 npm i body-parser --save
  2. 配置
 app.use(bodyParser.urlencoded({extended:false}));
 app.use(bodyParser.json());
  1. 使用
app.post('/post',(req,res)=>{
	console.log(req.body);
});

说明:

  1. 配置该插件必须放在 配置路由之前
  2. 配置好后 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中的中间件分为三类:

  1. 不关心任何请求路径和请求方法(post/get/…)的中间件(任何请求都会进入这个中间件) 比如:
app.use((req,res,next)=>{
	console.log('任何请求都会打印')
	next()调用下一个中间件
})
  1. 关心请求路径的中间件(以什么什么路径开头的中间件)
app.use('/a',(req,res,next()=>{
	console.log(req.url)
}))
//限制以/a开头的路径
  1. 严格匹配请求方法和路径的中间件,比如:
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对象,就会找到四个参数的错误处理中间件,方便进行错误集中处理

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!