nodeJs編寫錯誤處理中間件問題
更新時間:2022年12月03日 15:18:00 作者:你的美,讓我癡迷
這篇文章主要介紹了nodeJs編寫錯誤處理中間件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
nodeJs編寫錯誤處理中間件
app.use(async(ctx, next) => {
try {
await next();
} catch (err) {
console.log(err, "錯誤機(jī)制");
ctx.status = err.status || err.statusCode;
ctx.body = {
message: err.message
};
}
})koa-json-error 處理錯誤機(jī)制:
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 */
/* 當(dāng)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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs服務(wù)內(nèi)存泄露排查過程和優(yōu)化方法
在開發(fā)和部署Node.js應(yīng)用程序時,內(nèi)存泄露是一個常見的挑戰(zhàn),本文將探討如何對于一個陌生項目進(jìn)行內(nèi)存排查和優(yōu)化的方法,文章通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Express URL跳轉(zhuǎn)(重定向)的實現(xiàn)方法
Express是一個基于Node.js實現(xiàn)的Web框架,其響應(yīng)HTTP請求的response對象中有兩個用于URL跳轉(zhuǎn)方法res.location()和res.redirect(),使用它們可以實現(xiàn)URL的301或302重定向。2017-04-04
websocket結(jié)合node.js實現(xiàn)雙向通信的示例代碼
本文主要介紹了websocket結(jié)合node.js實現(xiàn)雙向通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
解決Node.js包管理器安裝報錯npm?ERR!?code?1的問題
在開發(fā)過程中,我們經(jīng)常需要使用各種Node.js包來擴(kuò)展我們的應(yīng)用程序功能,這些包通常通過npm(Node.js包管理器)進(jìn)行安裝和管理,有時候我們可能會遇到一些關(guān)于npm的錯誤,本文將詳細(xì)介紹如何解決這個問題,并提供一個詳細(xì)的實例,需要的朋友可以參考下2024-03-03

