我正在一个简单的web服务器上使用express.js顶部node.js。当我为我的服务器制作路由处理程序时,我不可避免地要分解出一些常见的功能。所以我想创建一个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模块的正确方法?
谢谢你的回答,但在阅读之后我还有更多的问题......我是Node.js的新手,所以我恐怕不能完全理解你的答案。您能否进一步解释我如何将中间件插入到路由中?我怎样才能将属性添加到请求对象?整个流程是什么? –
@Xavier_Ex查看关于路由中间件主题的[此博客文章](https://blog.caurea.org/2011/11/05/express-route-middleware-chains.html)。它使用CoffeeScript示例代码,但即使您不熟悉该代码,您也应该能够获得它的要点。 – JohnnyHK
谢谢,我会先读一下它。 –