Express Routes - 多个文件的问题
Express Routes - Issues with multiple files
我开始学习 Node.js 使用 Express,但路由系统几乎没有问题。
在我的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 很好用,它 return 正确地使用了 jade 模板 'index'。
我正在尝试在另一个文件中为 'admin' 模板(位于 './routes/admin' 中)做同样的事情。
关键是,当我转到 localhost:5000/admin(例如)时,它 return 出现 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;
如果有人有想法或想发表评论,不客气。
非常感谢(请原谅我的英语!)
您的问题可能是您正在实例化 express
及其 Router
的多个实例,每个路由文件中都有一个实例。您需要在 app.js
文件中添加一个 Router
,并且每个单独的路由文件都应引用此单个实例。
作为一个想法,您可以将 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) {
// ...
});
}
您正在尝试路由此页面 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'
});
});
或在 routes/admin 中插入此函数:
router.get('/', function(req, res, next) {
res.render('admin', {
title: 'Connexion'
});
});
它需要是:-app.use('/admin', admin);
(只在第一部分加上引号)而不是:-app.use('/admin, admin);
我开始学习 Node.js 使用 Express,但路由系统几乎没有问题。
在我的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 很好用,它 return 正确地使用了 jade 模板 'index'。
我正在尝试在另一个文件中为 'admin' 模板(位于 './routes/admin' 中)做同样的事情。 关键是,当我转到 localhost:5000/admin(例如)时,它 return 出现 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;
如果有人有想法或想发表评论,不客气。
非常感谢(请原谅我的英语!)
您的问题可能是您正在实例化 express
及其 Router
的多个实例,每个路由文件中都有一个实例。您需要在 app.js
文件中添加一个 Router
,并且每个单独的路由文件都应引用此单个实例。
作为一个想法,您可以将 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) {
// ...
});
}
您正在尝试路由此页面 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'
});
});
或在 routes/admin 中插入此函数:
router.get('/', function(req, res, next) {
res.render('admin', {
title: 'Connexion'
});
});
它需要是:-app.use('/admin', admin);
(只在第一部分加上引号)而不是:-app.use('/admin, admin);