我正在一個簡單的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
謝謝,我會先讀一下它。 –