nodeJs编写错误处理中间件问题
作者:你的美,让我痴迷
这篇文章主要介绍了nodeJs编写错误处理中间件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
nodeJs编写错误处理中间件
app.use(async(ctx, next) => { try { await next(); } catch (err) { console.log(err, "错误机制"); ctx.status = err.status || err.statusCode; ctx.body = { message: err.message }; } })
koa-json-error 处理错误机制:
const koajsonerror = require("koa-json-error"); app.use(koajsonerror({ postFormat: (err, { stack, ...rest }) => process.env.NODE_ENV === "production" ? rest : { stack, ...rest } }));
温馨提示:放在最前面
Connect中间件之错误处理中间件
范例
var connect = require('connect'); connect() .use(errorHandler()) .listen(3000); /* 错误处理中间件函数必须接受四个参数:err, req, res和 next */ /* 而常规的中间件只有三个参数:req,res和next */ /* 当Connect遇到错误时,它只调用错误处理中间件 */ function errorHandler() { var env = process.env.NODE_ENV || 'development'; return function(err, req, res, next) { res.statusCode = 500; switch (env) { case 'development': res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(err)); break; default: res.end('Server error'); } } }
多个错误处理中间件组件
var connect = require('connect'); var api = connect() .use(users) .use(pets) .use(errorHandler); var app = connect() .use(hello) .use('/api', api) .use(noPage) .use(errorPage) .listen(3000); // hello 中间件组件 function hello(req, res, next) { if (req.url.match(/^\/hello/)) { res.end('Hello World\n'); } else { next(); } } // users 中间件组件 var db = { users: [ {name: 'tobi'}, {name: 'loki'}, {name: 'jane'} ] }; function users(req, res, next) { var match = req.url.match(/^\/user\/(.+)/); if (match) { var user = db.users[match[1]]; if (user) { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(user)); } else { var err = new Error('User not found'); err.notFound = true; next(err); } } else { next(); } } // pets 中间件组件 function pets(req, res, next) { if (req.url.match(/^\/pet\/(.+)/)) { foo(); } else { next(); } } // errorHandler 错误处理中间件组件 function errorHandler(err, req, res, next) { console.error(err.stack); res.setHeader('Content-Type', 'application/json'); if (err.notFound) { res.statusCode = 404; res.end(JSON.stringify({error: err.message})); } else { res.statusCode = 500; res.end(JSON.stringify({error: 'Internal Server Error'})); } } // noPage 中间件组件 function noPage(req, res, next) { res.statusCode = 404; res.end('Not Found'); } // errorPage 错误处理中间件组件 function errorPage(err, req, res, next) { res.end('Impossible'); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。