如何在expressjs中使用director作为路由器

我想用Flatiron的director(路由器)和Resourceful(ODM)来使用express.js,因为我需要路由表和干净的多数据库模式的好处与validation。 我现在完全改用Flatiron的原因是因为我觉得它需要更多的时间,而且没有太多的文档资料。

但是,这是我目前使用快递的方式:

var express = require('express') , director = require('director'); function hello(){ console.log('Success'); } var router = new director.http.Router({ '/': { get: hello } }); 

不幸的是,这不起作用,只给了我一个“不能得到/”

那么该怎么办?

 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')); }); 

这里有一个使用快速, 机智和导演的示例应用程序。

如果您有更多的疑问,可以在我们的IRC会议室freenode的#nodejitsu上问他们。

首先,为了使用导演,你需要把它作为一个中间件包装起来,并通过它来expression,就像这样:

 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(); }); }; 

除此之外:你不需要导演使用足智多谋,并expression自己的路由器(所以你甚至可能不需要/想导演)。