要点
主要是app.use的callback中参数不同产生的多态,有err参数会处理错误,没有的会处理其他
code
//node
const 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......');
});