【问题标题】:Node.js Express: require/use one app within anotherNode.js Express:要求/在另一个应用程序中使用一个应用程序
【发布时间】:2012-08-30 10:00:56
【问题描述】:

我正面临以下情况。为了进一步模块化我的软件开发,我编写了一些独立的标准模块。例如基于 Express 和 Passport 的登录模块,允许用户使用各种社交服务登录。该模块还包含用于用户管理、登录、注册、配置文件等的 UI。

现在,我要做的就是将 Auth 应用程序文件夹(包含 express 应用程序、所有它的路由、视图、模型、设置和依赖项)放入另一个 Express 应用程序(例如,CMS)然后用require('./lib/auth/app.js')之类的东西加载它。我知道这是可能的,看看Kue

我该怎么做呢?以及如何管理命名空间问题?我当然可以将/auth/ 附加到每条路线,但我可以想象设置(app.use()'s)和公用文件夹会与“父”app.js 设置和公用文件夹冲突。

提前致谢,

法比安

【问题讨论】:

    标签: node.js express require


    【解决方案1】:

    我想我找到了答案。所以,我找到了this questionthis one。猜猜我的术语是关闭的。

    我通过做一些事情解决了我的问题。首先,我将所有路由和 url 更改为“命名空间”(不是真的,但这确实有效)。现在所有路线前面都有/auth/。我对所有链接都做了同样的事情,所以一切正常。

    接下来,我从 app.js 中删除了服务器部分。所以,不要这样做:

    require('http').createServer(app).listen(app.get('port'));

    我只是这样做:

    module.exports = app;

    我在 app 对象中添加了一些自定义方法:

    app.isLoggedIn = auth.isLoggedIn;
    app.notLoggedIn = auth.notLoggedIn;
    

    然后,在我的根应用程序中,我只需执行以下操作来加载 auth 应用程序。路由、公共文件和所有其他东西都会神奇地发生。很酷。

    var auth = require('./vendor/auth/app');
    var app  = express();
    
    app.configure(function() {
        app.use(auth); // use our auth app
    
        // do a lot of root-app related stuff...
    });
    

    还有很多事情要做:

    我的auth 应用使用了一些会话内容。根据第二个link,如果我理解正确,我的auth 应用程序中的app.use(session...) 内容会被app.use 覆盖。另外,我想定义一个 EJS 助手来生成我的网址(类似于site_url('/facebook/callback'),然后指向/auth/facebook/callback)。最后,我需要包含我的根应用程序中的设置。我正在考虑将我的整个 app.js(在 auth 中)包装在一个函数中,我将一个配置对象传递给该函数。像这样:

    module.exports = function(config) {
        var app = express();
    
        app.set('config', config);
        // various app settings, routes, etc
    
        // return app so it's available in my root.
        return app;
    
    }
    

    我希望这会有所帮助,如果您需要更多信息,我会看看是否可以将一些代码发布到 gist。让我知道!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多