2012-03-19 45 views
1

以从联盟simple example,我想知道在那里我可以把那通常会在app.configure,像passport.js配置代码:flatiron.js/union - 在哪里放app.use()配置?

app.configure(function() { 
    // Initialize Passport! Also use passport.session() middleware, to support 
    // persistent login sessions (recommended). 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
}); 

任何想法?服务器和路由器不接受use()。

回答

1

联盟似乎使用before收集这样的:

var server = union.createServer({ 
    before: [ 
    connect.session({ secret: 'keyboard cat' }), // for `passport.session()` 
    passport.initialize(), 
    passport.session(), 

    // etc. 
    ] 
}); 

"API" documentation

@option before {Array} 
    The `before` value is an array of middlewares, which are used to route and serve incoming 
    requests. For instance, in the example, `favicon` is a middleware which handles requests 
    for `/favicon.ico`. 
+0

'之前'与每个请求调用。应用程序加载时,仅配置一次app.configure。所以这是不一样的(并产生大量的开销)。 – Patrick 2012-03-20 09:39:18

+0

@Patrick这就是[Connect](http://www.senchalabs.org/connect/)基于中间件的工作原理 - 它们必须能够响应每个请求,或者将它传递到下一个中​​间件。 ['app.configure'](http://expressjs.com/guide.html#configuration)设置相同的场景;它只是选择一系列'app.use'调用(可以选择将它们连接到各种部署模式),而不是一个单独的,常量的'before'数组。这就是为什么它可以帮助挑剔你使用的中间件 - 每一个都会不断增加一些开销。 – 2012-03-20 16:53:19

+0

嗯,好的。我习惯于Express中的场景。我只是想知道,因为护照不起作用,我不明白为什么。 – Patrick 2012-03-20 18:07:15

1

联盟支持通过before属性连接的中间件,如前面其他人所说。但是,union不处理应用程序配置;熨斗做。但是,api与express有很大不同。

例如,配置一个应用程序可能是这个样子:

var path = require('path'), 
    flatiron = require('flatiron'), 
    app = flatiron.app, 
    plugins = flatiron.plugins, 
    connect = require('connect'), // most connect middlewares work with flatiron ootb 
    passport = require('passport'); 

// Use flatiron's http plugin (not the same as a middleware!) 
app.use(plugins.http); 

// configuration consists of key/value pairs, not of function blocks associated with 
// certain "environments". 
// Here's *a* way you can handle environment-based configs; there are others! 
app.config.file(path.resolve(
    __dirname, 
    'config', 
    (process.env.NODE_ENV || 'config') + '.json' 
)); 

// Use our config to set the secret 
app.http.before.push(connect.session({ 
    secret: app.config.get('secret') || 'keyboard cat' //default 
})) 
app.http.before.push(passport.initialize()); 
app.http.before.push(passport.session()); 

我还没有试过运行这个例子(我敢肯定有很多细节),但希望这给你的想法。

1

我刚建立了一个包装器,将Passport.js和Flatiron.js集成在一起。

https://npmjs.org/package/flatiron-passport

https://github.com/travist/flatiron-passport

请阅读如何使用它的README.md并将其应用到您的应用程序。

我在LocalStrategy上测试过它,但它应该适用于其他策略。

请让我知道否则。

+0

感谢您发布您的答案!请务必仔细阅读[自助推广常见问题](http://stackoverflow.com/faq#promotion)。 – 2012-08-28 12:42:54

+1

我不推销任何东西,除了我写的一个自由和开放源代码软件包来解决这个人关于整合passport.js与flatiron.js的问题。我还透露,我写了它。自我推销指南禁止我提供代码链接,或者我应该将其直接复制并粘贴到我的答案中。对不起......刚刚提供给stackoverflow,所以不完全确定我违反了条款。 – travist 2012-08-28 19:49:12

+0

您是否看过我发布的链接?有些东西是免费的或开源的,在这里没有任何影响。我不是说你侵犯了任何东西。我正在强烈建议你阅读和理解。 – 2012-08-28 19:54:36