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 に答える