0

Express js で書かれた https サーバーがあります。そして、サーバーにドメインを追加しました。App.js ファイル:

var d = require('domain').create();

d.on('error', function(error) {
    console.error("Domain caught error: "+ error.stack);
});


d.run(function() {
    var express = require('express');
    var appServer = express();
    var https = require('https').createServer(options, appServer);

    https.listen(8000, function() {
        log.info('Server is listening on port ' + 8000);
    });

    appServer.use(appServer.router);
    var routes = require('./routes')(appServer); //my routes file
});

他のファイルにルート ハンドラー関数があります。app.jsファイルからエクスポートせずに、ルートファイルでapp.jsファイルで作成されたドメインを使用するにはどうすればよいですか。

アップデート:

routes.js ファイル:

var auth = require('./auth');

module.exports = function(app) {
    app.namespace('/login', function(){
    app.post('/user', auth.verifyUser);
    });
};

auth.js ファイル:

exports.verifyUser = function(req,res) {
    //here I want to see my domain
};
4

1 に答える 1

0

ルートを作成するときに渡すことができrequireます:

var routes = require('./routes')(appServer, d);

次に、routes/index.jsファイル内で:

module.exports = function(app, domain) {

    // ...

};

アップデート

質問の更新に基づいて回答を更新するには、domain各ルート定義内に を含めるソリューションを次に示します。これを行うにはいくつかの方法があります (たとえば、各ルートをクラスにして、インスタンス化して に渡し、domainルートごとに関数を定義することができます)。function(req, res)上記で に対して定義したようにこれらのルート定義シグネチャを保持することが目的であるため、関数を呼び出す前に をこのルートにverifyUser渡す必要があります。これを非常に単純にdomain保つと、関数を使用してそれを行うことができます。setDomain

ルートを作成するindex.jsときのメインの同じコード:require

var routes = require('./routes')(appServer, d);

では、関数を介して をルートにroutes.js渡すことができます。domainsetDomain

var auth = require('./auth');

module.exports = function(app, domain) {
    auth.setDomain(domain);
    app.namespace('/login', function() {
        app.post('/user', auth.verifyUser);
    });
};

最後に、auth.jsファイルでドメインを取得し、ファイルのスコープ内でアクセスしてverifyUser関数で使用できます。

var myDomain;

module.exports.setDomain = function(domain) {
    myDomain = domain;
};

module.exports.verifyUser = function(req, res) {
    res.send("myDomain: " + myDomain);
};

このソリューションが本当に好きかどうかはわかりませんが、繰り返しますが、署名は同じままですverifyUser. より良いものを考えたり、コード内で渡しているこのドメインをより有効に利用するためにコードをリファクタリングしたいと思うかもしれません (別の場所でドメインを定義し、必要に応じてそこからプルすることもできます)。

于 2014-06-12T17:02:46.920 に答える