要点
主要是app.use的callback中参数不同产生的多态,有err参数会处理错误,没有的会处理其他
code
//nodeconst express = require('express');const fs = require('fs');const path = require('path');const app = express();app.get('/', (req, res, next) => {try {const data = JSON.parse('{name:}');res.json(data);} catch (e) {next(e);}});app.get('/a', (req, res, next) => {res.end('<h1>Hello World!</h1>');});/** 处理404错误* */app.use((req,res,next)=>{res.writeHead(404,{'Content-Type':'text/html;charset=utf-8'});console.log('404');res.end('你访问的资源不存在');});/** 🙆统一的错误处理日志* */app.use((err, req, res, next) => {const error_log = `======================错误名:${err.name},\n错误信息:${err.message},\n错误时间:${new Date()},\n错误堆栈:${err.stack},\n======================`;fs.appendFile(path.join(__dirname, 'error.log'), error_log, err1 => {res.writeHead(500,{'Content-Type':'text/html;charset=utf-8'});res.end('500 服务器内部错误');})});app.listen(3000, () => {console.log('running......');});
