背景
我正在使用node.js上的express.js创建一个简单的Web服务器。当我为我的服务器制作路由处理程序时,我不可避免地需要考虑一些常见的功能。所以我想创建一个baseHandler,它具有所有常见的处理函数,比如DB连接,当我编写其他路由处理程序时,我想'扩展'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中扩展模块的正确方法是什么?
答案 0 :(得分:3)
将常用功能放入中间件,您可以将其插入需要该功能的路由,而不是创建类层次结构。这迫使您将功能干净地分离为独立组件。中间件可以通过将它们添加为req
请求对象的属性来使路由可以使用数据库连接。