Node.js:进行模块继承的正确方法是什么?



背景

我正在node.js之上使用express.js制作一个简单的web服务器。当我为服务器制作路由处理程序时,我不可避免地需要考虑一些常见的功能。因此,我想制作一个具有所有通用处理程序功能(如DB连接)的baseHandler,当我编写其他路由处理程序时,我想"扩展"baseHandler,以方便地获得这些通用处理程序能力。

我正在尝试的

实现这一目标的方法有哪些,正确的方法是什么?我正在尝试一个非常直接的解决方案,我将baseHandler作为一个普通的处理程序模块编写,它有一个本地mysql实例,并导出操作数据库的函数。以下代码:

// Mysql 
var _mysql = require('mysql');
// Mysql connection
exports.getDbHandle = function() {
var mysql = _mysql.createConnection({
host: xxx
port: xxx
user: xxx
password: xxx
database: xxx
});
return mysql;
};

然后,在我的路由处理程序中,我只需要这个模块,并使用它所具有的任何函数。这似乎解决了问题,但我觉得这不是正确的方法。因为我的路由处理程序中会有一个baseHandler模块的实例,它感觉像是一个实用程序模块,而不是路由处理程序本身的一部分。

问题

那么,在nodejs中扩展模块的正确方法是什么呢?

将通用功能放入中间件中,您可以将其插入需要该功能的路由,而不是创建类层次结构。这迫使您将功能干净地解耦为独立的组件。中间件可以通过将数据库连接添加为req请求对象的属性,使其可用于路由。

相关内容

最新更新