Express Routes – 多个文件的问题

我开始用Express学习Node.js,但是我在路由系统上遇到了一些问题。

在我的app.js(我的主文件)中,我有:

var express = require('express'); var path = require('path'); var routes = require('./routes/index'); var admin = require('./routes/admin'); ... app.use('/', routes); app.use('/admin, admin); 

在index.js中:

 var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); 

根url工作得很好,它正确地返回了玉模板的'索引'。

我正在尝试在“admin”模板(在“./routes/admin”中)的其他文件中做同样的事情。 有一点,当我去本地主机:5000 /pipe理(例如),它会返回一个404错误。

有我的admin.js文件:

 var express = require('express'); var router = express.Router(); router.get('/admin', function(req, res, next) { res.render('admin', { title: 'Connexion' }); }); 

index.js和admin.js都包含module.exports = router;

如果有人有想法或想评论,欢迎您。

非常感谢(并且原谅我的英语!)

您正尝试将此页面路由到localhost:5000 / admin / admin。 app.use('/ admin,admin); 意味着admin.js中的所有函数都会被这个请求调用localhost:5000 / admin / …所以如果你想用这个请求localhost:5000 / admin来渲染admin.jade,你应该在routes / index中插入这个函数

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

或在路由/pipe理插入此function:

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

你的问题可能是你正在实例化express和它的Router多个实例,每个路由文件中有一个。 你需要一个Router在你的app.js文件中,每个单独的路由文件都应该引用这个单独的实例。

作为一个想法,你可以通过app.js将你的路由器传递给你的每个routes文件:

 // app.js var admin = require('./routes/admin'); admin.init(router); 

然后在你的admin.js文件中:

 var init = function(router) { exports.router = router; exports.router.get('/admin', function(req, res, next) { // ... }); }