Express是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
其使用也颇为简单,下面用一小段伪代码实现一个简单的使用
const express = require('express')//引入依赖包
const app = express()//创建express实例
app.use('/',(req,res)=>{//实现路由
res.send('home') //给浏览器返回数据,此时已经进行封装,不需要使用end方法
res.json({})//给浏览器返回一个json数据
})
app.listen(3000)//监听端口
Express还有一个重要知识点是中间件以及中间件栈
其中间件
的类型分为5类:
- 应用中间件
即自定义的中间件,一个回调函数,有req,res和next三个参数 - 路由中间件
- 错误捕获中间件
app.use(function(err,req,res,next){
console.error(err.stack)
res.status(500).send('ddd')
})
- 内置中间件 例如static(静态资源中间件)
app.use(express.static('./public'))
//加载出来该路径下的所有静态资源,无需定义路由
- 第三方中间件 例如bodyParser(转换post传参的中间件)
这类中间件使用时直接npm安装第三方的包导入使用即可
app. use(bodyParser.urlencoded({extended:false}))//可以获取post请求传参的req.body
app.use(bodyParser.json())//获取post传参的json格式
app.use(bodyParser.raw())//获取post传参的二进制流格式,此时需要通过multer或者raw-body来获取rawBody
中间件栈
即多个中间件组合,通过next进入下一个中间件操作,需要在下一个中间件中使用的数据可以在上一个中间件中将它绑定在req上。通过不同中间件的组合以及拦截,实现不同的需求和功能。
例如:
app.use(
'/ajax',
(req,res,next)=>{
console.log(0)
next()
},
(req,res,next)=>{
console.log(1)
next()
},
(req,res,next)=>{
console.log(2)
}
)
输出结果:
0
1
2
如果在上例中,不添加next(),则无法进入下一个中间件,只能停留在第一个中间件处,则只会输出0
0
当然在Express中也可以使用模板引擎,通常使用官网推荐的模板可以在安装了该模板的包之后直接进行配置
app.set('view engine','pug')//指定模板格式
但是在使用art-template这个模板的时候,有一个坑,官方文档给出的示例配置代码是错误的。
即在配置时需要将
app.set('view', {
debug: process.env.NODE_ENV !== 'production'
});
改为
app.set('view options', {
debug: process.env.NODE_ENV !== 'production'
});