nodeJs編寫錯誤處理中間件問題
更新時間:2022年12月03日 15:18:00 作者:你的美,讓我癡迷
這篇文章主要介紹了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); /* 錯誤處理中間件函數(shù)必須接受四個參數(shù):err, req, res和 next */ /* 而常規(guī)的中間件只有三個參數(shù):req,res和next */ /* 當Connect遇到錯誤時,它只調(diào)用錯誤處理中間件 */ 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'); }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
nodejs服務內(nèi)存泄露排查過程和優(yōu)化方法
在開發(fā)和部署Node.js應用程序時,內(nèi)存泄露是一個常見的挑戰(zhàn),本文將探討如何對于一個陌生項目進行內(nèi)存排查和優(yōu)化的方法,文章通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11Express URL跳轉(zhuǎn)(重定向)的實現(xiàn)方法
Express是一個基于Node.js實現(xiàn)的Web框架,其響應HTTP請求的response對象中有兩個用于URL跳轉(zhuǎn)方法res.location()和res.redirect(),使用它們可以實現(xiàn)URL的301或302重定向。2017-04-04websocket結(jié)合node.js實現(xiàn)雙向通信的示例代碼
本文主要介紹了websocket結(jié)合node.js實現(xiàn)雙向通信的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02解決Node.js包管理器安裝報錯npm?ERR!?code?1的問題
在開發(fā)過程中,我們經(jīng)常需要使用各種Node.js包來擴展我們的應用程序功能,這些包通常通過npm(Node.js包管理器)進行安裝和管理,有時候我們可能會遇到一些關于npm的錯誤,本文將詳細介紹如何解決這個問題,并提供一個詳細的實例,需要的朋友可以參考下2024-03-03