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

前端之家收集整理的这篇文章主要介绍了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') );

猜你在找的JavaScript相关文章