Pat*_*ick 7 javascript url-routing node.js flatiron.js
来自express.js,我想为一个小项目尝试熨斗.然而,有一些小问题使我无法真正到达某个地方.
var flatiron = require('flatiron')
, session = require('connect').session
, ecstatic = require('ecstatic')
, path = require('path')
, fs = require('fs')
, plates = require('plates')
, director = require('director')
, winston = require('winston')
, union = require('union');
var router = new director.http.Router();
var server = union.createServer({
before: [
ecstatic(__dirname + '/public')
]
});
router.get('/', function () {
var self = this;
fs.readFile('public/layout.html', 'utf-8', function(err, html) {
[...]
})
});
server.listen(3000, function () {
console.log('Application is now started on port 3000');
});
Run Code Online (Sandbox Code Playgroud)
如何使用导演工作?当我离开狂喜时,我可以定义像'/'这样的路线并且它可以工作,但是我没有得到静态的CSS和JS内容.使用ecstatic /替换为'index.html',并且ecstatic优先于所有已定义的路线. - 这与connect-static的行为相同.路径(/)由index.html替换.
我还尝试了使用连接中间件的不同方法,但这不起作用:
var flatiron = require('flatiron')
, connect = require('connect')
, path = require('path')
, fs = require('fs')
, plates = require('plates')
, app = flatiron.app;
app.use(flatiron.plugins.http);
app.use(connect.favicon());
app.use(connect.static(__dirname + '/public'));
app.use(connect.directory(__dirname + '/public'));
app.use(connect.cookieParser('my secret here'));
app.use(connect.session({'secret': 'keyboard cat'}));
app.router.get('/', function () {
console.log("GET /");
var self = this;
fs.readFile('public/layout.html', 'utf-8', function(err, html) {
[...]
})
});
app.listen(3000, function () {
console.log('Application is now started on port 3000');
});
Run Code Online (Sandbox Code Playgroud)
我认为关于 Flatiron 中路由的问题的最佳答案一如既往地在源代码中:
app.server = union.createServer({
after: app.http.after,
before: app.http.before.concat(function (req, res) {
if (!app.router.dispatch(req, res, app.http.onError || union.errorHandler)) {
if (!app.http.onError) res.emit('next');
}
}),
headers: app.http.headers,
limit: app.http.limit
});
Run Code Online (Sandbox Code Playgroud)
正如您在这里看到的,Flatiron 将路由器绑定为最后一个请求处理程序,在所有中间件之后调用。如果您将“ecstatic”放在 app.http.before 中,并且它将在工作流程期间调度,则不会调用其他中间件。
您的第二个代码块表明您不理解 Flatiron 的 .use() 方法与 Express/Connect 的方法之间的区别。我将尝试通过这个例子来阐明:
flatironApp.use({
// plugin object
name : "pluginName"
, attach : function(options) {
/*code*/
}
, init : function(done) {
/*code*/
done();
}
})
connectApp.use(function(req, res, next) {
/* code */
next();
})
Run Code Online (Sandbox Code Playgroud)
如果你想在 Flatiron 中使用 Connect 的中间件,你应该将其分别放置在 app.http.before 数组中,如下所示:
// Initiating application
app.use(flatiron.plugins.http);
// Adding request handlers
app.http.before.push( connect.favicon() );
app.http.before.push( ecstatic(__dirname + '/public') );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1860 次 |
| 最近记录: |