2012-06-28 12 views
5

Chcę używać express.js z dyrektorem Flatiron (routerem) i Resourceful (ODM), ponieważ potrzebuję jak korzyści z tabel routingu i czyszczenia schematów multi-db z walidacją. Powodem, dla którego teraz całkowicie przełączam się na Flatiron, jest to, ponieważ uważam, że potrzebuje trochę więcej czasu i nie ma zbyt wiele materiału doktora.Jak korzystać z reżysera jako routera w expressjs

jednak, że jest obecny sposób używam dyrektora Express:

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

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

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

Niestety to nie działa i daje mi tylko "Can not Get /"

Więc co robić?

+0

Dodano kolejny przykład wariant trasy do repo, aby pokazać, jak łatwo można zbudować na szczycie we własnej aplikacji lub przedłużeniem https://github.com/visionmedia/express/commit/39efa452fcb075a9a5870f1f71fe60a8742e687b –

Odpowiedz

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

Jest aplikacja Przykład zastosowania Express, resourceful i directorhere.

Jeśli masz więcej wątpliwości, możesz poprosić ich w naszym pokoju IRC#nodejitsu na freenode.

+0

Dziękuję za to ! Przyjrzę się bliżej kuli :) –

3

Po pierwsze, w celu wykorzystania dyrektora trzeba owinąć go jako warstwy pośredniej i przekazać ją wyrazić, jak w przykładzie:

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

Poza tym: Nie trzeba używać reżysera zaradny, i express ma swój własny router (więc możesz nawet nie potrzebować/nie chcieć reżysera).

+0

Witam josh, porównałem express i flatiron intensywnie. Komponenty flatiron mają dobre myśli (zwłaszcza tablice routingu (reżyser), jeden intuicyjny schemat api z walidacją i wiele możliwości kodowania schematu). Te rzeczy są naprawdę ciężkie, ale z drugiej strony są rzeczy, które łamią intuicję. Na przykład "skomplikowany" sposób użycia reżysera (ze względu na szerokie wsparcie: serwer, klient i cli, http) lub sposób tworzenia połączenia z bazą danych. Nienawidzę krytykować tego bez wiedzy, którą mogę wesprzeć :(ale może to pomaga nodejitsus :) –

Powiązane problemy