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'); }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- nodejs中的http模塊與npm模塊使用
- Node.js全局處理響應並進行異常管理
- js代碼實現多人聊天室
- JS中的Error對象及使用JSON.stringify()序列化Error問題
- node.js 實現手機號驗證碼登錄功能