2013-07-02 19 views
11

Tôi đang cố tạo một tuyến đường cho localhost: port/admin/ và tôi muốn giữ các tệp routes.js và tệp view.js trong các thư mục phù hợp vì vậy tôi sẽ không có quá nhiều spaggeti saulàm cách nào để sửa các tuyến đường để tìm các khung nhìn bên trong các thư mục con trong node.js

nhưng tôi cứ bị: 500 Lỗi: Không thể tra cứu xem "/ admin/manage_subjects" cho cố gắng để tạo ra một con đường mới và sử dụng cùng một thư mục vài cùng

tôi có thư mục chế độ xem sau với express

mainapp(root) 
    routes(folder) 
    admin(folder) 
     index.js(nested inside admin) 
    index.js(nested inside routes) 
    views(folder) 
    admin(folder) 
     admin_layout.jade(nested inside admin) 
     manage_subjects.jade(nested inside admin) 
    index.jade(nested inside views) 
    layout.jade(nested inside views) 

mã: tuyến/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} 

app.js tôi đang

/** 
* 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

trong các tuyến đường/admin/index.js có vẻ như nó phải là 'res.render ('admin/manage_subjects', {title: 'Express'});}' – knshn

+0

tôi đã thử nó, không hoạt động: ( – user2538720

Trả lời

1

tôi muốn kiểm tra Video của TJ trên các ứng dụng Modular on his vimeo phần hay nhất về luồng công việc này là mã của bạn trở nên thực sự linh hoạt và dễ dàng hơn để giữ lại DRY.

Bên cạnh đó tôi sẽ làm một cái gì đó như thế này với tôi app.set("views")

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

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

Một lựa chọn khác sẽ là một cái gì đó giống như trong file app.js của bạn:

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

và sau đó tuyến đường sẽ trông như thế:

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

module.exports = routes 

Chúc mừng, tôi hy vọng điều này sẽ hữu ích !

12

Tôi đã xử lý những gì tôi nghĩ là cùng một vấn đề và đã tìm ra cách khắc phục. Vì vậy, trong trường hợp người khác gặp phải vấn đề này, tôi đang đăng giải pháp của mình.

Vì vậy, đây là những gì tôi đã có điều đó đã gây ra 404 và 500 của

app.js

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

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

và đây là tuyến đường của tôi/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; 

và các tuyến đường của tôi/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; 

bằng cách xác định thứ hai/admin bên trong hàm router.get() Tôi nghĩ rằng tôi đã nói một cách hiệu quả nút tìm kiếm html trong thư mục views của tôi dưới các khung nhìn sau/admin/admin/index.ejs. Vì vậy, để khắc phục tất cả những gì tôi phải làm là xóa/admin từ router.get() hoặc/admin từ app.use() Vì vậy, mã làm việc của tôi bây giờ trông giống như sau:

ứng dụng.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 

và đây là tuyến đường của tôi/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; 

và các tuyến đường của tôi/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; 

Vì vậy, làm cho sự thay đổi đó đã làm cho nó để tôi có thể có con thư mục trong thư mục lượt xem của tôi.

+0

res. render ('admin/index', {title: 'Express'}); giải pháp cho tôi - thnks – Guihgo

Các vấn đề liên quan