我有用快递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
};
答案 0 :(得分: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
,您可以通过domain
功能将setDomain
传递给路线:
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
的签名相同。也许你会想到一个更好的,或者想要重构你的代码,以便更好地利用你在代码中传递的这个域(可能在其他地方定义它并从那里把它拉到任何需要的地方)。