javascript – flatiron.js使用union,director和plate进行路由和模板化?

来自express.js,我想为一个小项目尝试 flatiron.然而,有一些小问题使我无法实际到达某个地方.
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');
});

如何使用导演工作?当我离开ecstatic时,我可以定义像’/’这样的路线并且它可以工作,但是我没有得到静态的CSS和JS内容.使用ecstatic /替换为’index.html’,并且ecstatic优先于所有已定义的路线.
– 这与connect-static的行为相同.路径(/)由index.html替换.

我还尝试了使用连接中间件的不同方法,但这不起作用:

var flatiron = require('flatiron'),connect = require('connect'),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',html) {
    [...]
  })
});

app.listen(3000,function () {
  console.log('Application is now started on port 3000');
});

解决方法

我认为关于在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
     });

正如你在这里看到的那样,flatiron将路由器绑定为最后一个请求处理程序,在所有中间件之后调用.如果你在app.http.before中放置’ecstatic’并且它将在工作流程中调度,则不会调用其他中间件.

你的第二段代码表明你没有看出Flatiron的Express(Connect)连接方法之间的区别.我将尝试在此示例中明确说明:

flatironApp.use({
        // plugin object
        name : "pluginName",attach : function(options) {  
          /*code*/  
      },init : function(done) { 
          /*code*/ 
          done(); 
      }
    })

    connectApp.use(function(req,next) {
      /* code */
      next();
    })

如果你想在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') );

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ "TOC" 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...