应用层中间件
next( ) 代表下一个
const express = require('express')
const app = express()
// 中间件
app.use(function (req, res, next) { //添加next参数
console.log("主页执行的上面");
next(); //调用执行下一步
})
app.get('/', function (req, res) {
res.send("主页") //相应到页面显示 “主页”
})
app.listen(8888) //指定端口
路由中间件 应用层中间件
Router是指应用程序的端点(URI)如何响应客户端请求。
const router = express.Router() //引入router
const express = require('express') //引入express框架
const app = express() //实例化express框架
const router = express.Router() //引入router
router.use('/', function (req, res, next) {
console.log('匹配前');
next() //下一步
})
router.use('/user', function (req, res, next) {
console.log(`请求的地址${req.originalUrl}`); //请求的地址/api/user
next()
}, function (req, res) {
res.send("登录请求")
})
app.use('/api', router)//在app上绑定上router
app.listen(8888)
错误处理中间件
错误响应码500
res.status(500).send(err.message)
const express = require('express')
const app = express()
const fs = require('fs') //fs模块为nodejs的核心模块之一,主要处理文件的读写、复制、s删除、重命名等操作。当需要使用该模块时,需要先导入该文件
app.get('/index1111111', (req, res, next) => {
// res.send("hello")
// throw new Error("程序错误") 失败 成功
fs.readFile('./test.txt', 'utf-8', (err, data) => { //readFile 异步
if (err) {
next(err) //err失败返回的数据
} else {
res.send(data) //成功返回文件里面的数据
}
})
})
// 注意 : 里面一样要放四个参数
app.use((err, req, res, next) => {
res.status(500).send(err.message)
// 当文件名出错时就会触发此时此事件
//返回未定义 因此无法对其调用send 报错信息
})
app.listen(8888)
内置中间件
可以直接在浏览器url中直接读取指定,文件夹里面的文件
const express = require('express')
const app = express()
app.use('/static', express.static('public')) //默认第一个public文件夹中的第一个文件
app.listen(8888)