0

背景

我正在 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中扩展模块的正确方法是什么?

4

1 回答 1

3

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

于 2012-12-17T20:54:20.083 回答