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);
 
/* 错误处理中间件函数必须接受四个参数: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');
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • node.js中的console.warn方法使用说明

    node.js中的console.warn方法使用说明

    这篇文章主要介绍了node.js中的console.warn方法使用说明,本文介绍了console.warn的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 安装nvm并使用nvm安装nodejs及配置环境变量的全过程

    安装nvm并使用nvm安装nodejs及配置环境变量的全过程

    有时候使用nvm管理node会发现无法使用node或npm,主要原因是环境变量没有配置成功,下面这篇文章主要给大家介绍了关于安装nvm并使用nvm安装nodejs及配置环境变量的相关资料,需要的朋友可以参考下
    2023-03-03
  • Node.js连接MySQL数据库的操作步骤

    Node.js连接MySQL数据库的操作步骤

    在现代 Web 开发中,与数据库的交互是不可避免的一部分,Node.js提供了许多库和模块,使得连接和操作 MySQL 数据库变得相对简单,本文将介绍如何使用Node.js连接MySQL数据库,并进行一些基本的操作,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 微信小程序搭载node.js服务器的简单教程

    微信小程序搭载node.js服务器的简单教程

    小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验,下面这篇文章主要给大家介绍了关于微信小程序搭载node.js服务器的简单教程,需要的朋友可以参考下
    2022-12-12
  • Node.js zlib模块之属性、方法及使用示例详解

    Node.js zlib模块之属性、方法及使用示例详解

    zlib模块是Node.js中用于数据压缩和解压缩的强大工具,它提供了多种压缩算法和灵活的使用方式,包括Deflate、Gzip等,广泛用于网络传输和文件存储中以减少数据大小,提高性能,本文给大家介绍Node.js zlib模块属性、方法及使用示例,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • NodeJS实现客户端js加密

    NodeJS实现客户端js加密

    本文主要介绍了NodeJS实现客户端js加密的思路与方法,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • nodejs实现发出蜂鸣声音(系统报警声)的方法

    nodejs实现发出蜂鸣声音(系统报警声)的方法

    这篇文章主要介绍了nodejs实现发出蜂鸣声音(系统报警声)的方法,结合实例形式分析了nodejs发出蜂鸣声的原理及具体应用方法,需要的朋友可以参考下
    2017-01-01
  • Node.js制作简单聊天室

    Node.js制作简单聊天室

    这篇文章主要为大家详细介绍了Node.js制作简单聊天室的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 详解Node.js项目APM监控之New Relic

    详解Node.js项目APM监控之New Relic

    本篇文章主要介绍了Node.js项目APM监控之New Relic,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Node.js事件的正确使用方法

    Node.js事件的正确使用方法

    这篇文章主要给大家介绍了关于Node.js事件的正确使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04

最新评论