5

我想将 express.js 与 Flatiron 的导向器(路由器)和资源丰富的(ODM)一起使用,因为我需要路由表的好处和带有验证的清理多数据库模式。我现在完全切换到 Flatiron 的原因是,因为我认为它需要更多时间,而且文档资料不多。

但是,这是我在 express 中使用 director 的当前方式:

var express = require('express')
  , director = require('director');

function hello(){
    console.log('Success');
}

var router = new director.http.Router({
    '/': {
        get: hello
    }
});

不幸的是,这不起作用,只给了我一个“无法获取 /”

那么该怎么办呢?

4

2 回答 2

5
var express = require('express')
  , director = require('director')
  , http = require('http');

var app = express();

var hello = function () {
  this.res.send(200, 'Hello World!');
};

var router = new director.http.Router({
  '/': {
    get: hello
  }
});

var middleware = function (req, res, next) {
  router.dispatch(req, res, function (err) {
    if (err == undefined || err) next();
  });
};

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  app.use(express.favicon());
  app.use(express.bodyParser());

  app.use(middleware);

  app.use(express.static(__dirname + '/public'));
});

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

这里有一个使用 express、resourcefuldirector 的示例应用程序。

如果您有更多疑问,可以在我们的 IRC 房间 #nodejitsu on freenode 询问他们。

于 2012-06-28T17:36:08.907 回答
3

首先,为了使用director,你需要把它包装成一个中间件并传递给express,像这样:

app.use(function (req, res, next) {
  router.dispatch(req, res, function (err) {
    if (err) {
      // handle errors however you like. This one is probably not important.
    }
    next();
  });
};

除此之外:你不需要director来使用resourceful,并且express有自己的路由器(所以你甚至可能不需要/想要director)。

于 2012-06-28T17:44:10.063 回答