express中间件分三类
中间件一般都是通过i修改req 或res对象来为后续的处理提供遍历的使用
中间件分类 next 放行函数
- use(function(req,res,next){})
- use('请求路径',function(req,res,next){})
- get('请求路径',function(req,res,next){})
- post('请求路径',function(req,res,next){})
错误日记处理方式
const express=require('express')
const fs = require('fs')
const app=express();
// parse application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: false }))
// parse application/json
app.use(express.json())
app.use((req,res,next)=>{
res.header("Content-Type", "application/json; charset=utf-8")
next()
})
app.get('/', (req, res) => {
//通过JSON.parse解析查询字符串中的某个
try {
const data = JSON.parse('{abc');
res.json(data);
} catch (e) {
const error_log = `
错误名:${e.name}
错误消息:${e.message}
错误堆栈:${e.stack}
错误时间:${new Date()}
`
fs.appendFile('./err_log.txt', error_log, (err) => {
res.writeHead(500, {})
res.end('500 服务器正忙,请稍后重试')
})
}
})
app.get('/a', (req, res, next) => {
fs.readFile('./a.text', (err, data) => {
if (err) {
//这里调用的next会被app.use((err,req,res,next))这个中间件匹配到
next(err)
}
})
})
//该中间件只有被带有参数的next才能调用到
app.use((err, req, res, next) => {
const error_log = `
错误名:${e.name}
错误消息:${e.message}
错误堆栈:${e.stack}
错误时间:${new Date()}
`
fs.appendFile('./err_log.txt', error_log, (err) => {
res.writeHead(500, {})
res.end('500 服务器正忙,请稍后重试')
})
})
//404处理中间件
app.use((req,res,next)=>{
res.end('404')
})
app.listen(3000,()=>{
console.log('server start and listen at 3000')
})

浙公网安备 33010602011771号