2013-07-02 6 views
11

Próbuję utworzyć trasę dla localhost: port/admin/ i chcę zachować pliki routes.js i pliki view.js w pasujących folderach więc przyzwyczajenie się zbyt wiele spaggeti późniejJak naprawić trasy, aby znaleźć widoki wewnątrz podfolderów w pliku node.js

ale ciśgle: 500 błąd: Nie udało się odnośnika widok „/ admin/manage_subjects” za próbę stworzenia nowej trasy i stosując te same foldery niewielu tego samego

Mam następujący folder widoku z wyrazami:

kod: szlaki/admin/index.js

exports.index = function (req, res) { 
res.render('manage_subjects',{title:'Express'});} 

views/admin/manage_subjects.jade

extends admin_layout 
block content 
h1 = title 
p Welcome to #{title} 

moi app.js kod

/** 
* Module dependencies. 
*/ 

var express = require('express') 
    , routes = require('./routes') 
    , admin_routes = require('./routes/admin/') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path') 
    , repository = new (require('./domain_model/repository'))(); 

var app = express(); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

//fill local subjects 
repository.subjects.GetAll(function (err, data) { 
    if (err) throw err; 
    app.locals.subjects = data; 
}); 

//append routes 
app.get('/', routes.index); 
app.get('/admin', admin_routes.index); 
app.get('/users', user.list); 

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

w routes/admin/index.js wygląda na to, że powinno to być 'res.render ('admin/manage_subjects', {title: 'Express'});}' – knshn

+0

Próbowałem go, nie działało :( – user2538720

Odpowiedz

1

bym sprawdzić Film TJ na temat aplikacji modułowych on his vimeo Najlepszą częścią tego przepływu pracy jest twój kod, który staje się bardzo elastyczny i łatwiej jest pozostać DRY.

Dodatkowo chciałbym zrobić coś takiego z moim app.set("views")

var path = require("path"); 
app.set('views', path.join(__dirname, 'views')); 

// you can then extend this to the example for routes 

Inną alternatywą byłoby coś podobnego w pliku app.js:

var express require("express") 
var app = express() 
var routes = require("./path/to/routes")(app) 

a następnie trasy wyglądałby następująco:

routes = function (app) { 
    app.get("/route", middleWareifYou.gotIt, route.handler || function (req, res) { 
    res.send("some msg"); 
    }); 
}; 

module.exports = routes 

Pozdrawiam, mam nadzieję, że to pomaga !

12

Zajmuję się tym, co moim zdaniem jest tym samym problemem i zorientowałem się, jak to naprawić. Jeśli ktoś inny natknie się na ten problem, publikuję moje rozwiązanie.

Więc tutaj jest to, co miałem, który był przyczyną 404 i 500 na

app.js

var routes = require('./routes/index'); 
var admin = require('./routes/admin'); 

app.use('/', routes); 
app.use('/admin', admin); 

i tu było moje szlaki/index.js

//append routes 
var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res) { 
    res.render('index', {title: 'Express'}); 
}); 

module.exports = router; 

i moje trasy/admin.js:

var express = require('express'); 
var router = express.Router(); 

router.get('/admin', function(req, res) { 
    res.render('admin/index', {title: 'Express'}); 
}); 

module.exports = router; 

przez zdefiniowanie drugiego/admin wewnątrz funkcji router.get() Myślę, że skutecznie poleciłem węzłowi, aby szukał html w folderze my views pod następującymi widokami ścieżek/admin/admin/index.ejs. Tak więc naprawić wszystko, co musiałem zrobić, to usunąć/admin z router.get() lub/admin z app.use() Tak więc mój działający kod wygląda teraz tak:

aplikacja.js

var routes = require('./routes/index'); 
var admin = require('./routes/admin'); 

app.use('/', routes); 
app.use('/admin', admin); //I left the /admin here and instead removed the one in routes/admin.js 

i tu był mój drogi/index.js

//append routes 
var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res) { 
    res.render('index', {title: 'Express'}); 
}); 

module.exports = router; 

i moje szlaki/admin.js:

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res) { //NOTICE THE CHANGE HERE 
    res.render('admin/index', {title: 'Express'}); 
}); 

module.exports = router; 

więc dokonanie tej zmiany sprawiły, że tak mogę mieć sub foldery w folderze Moje widoki.

+0

res. render ('admin/index', {title: 'Express'}), rozwiązanie dla mnie - thnks – Guihgo

Powiązane problemy