快速路由 - 多个文件的问题

时间:2015-03-27 22:08:03

标签: javascript node.js 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'
  });
});

根网址很好,并且正确返回了玉模板'index'。

我正在尝试在不同的文件中为“管理员”模板(位于“./routes/admin”中)执行相同的操作。 有一点,当我去localhost:5000 / admin(例如)时,它返回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;

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

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

3 个答案:

答案 0 :(得分:2)

您正在尝试将此页面路由为localhost:5000 / admin / admin。 app.use(' / admin,admin);表示此请求将调用admin.js中的所有函数localhost:5000 / admin / ... 所以如果你想用这个请求localhost:5000 / admin渲染admin.jade,你应该插入这个函数 的路由/索引

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

或在路线/管理员中插入此功能:

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

答案 1 :(得分:0)

您的问题可能是您正在实例化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) { 
    // ...
  });
}

答案 2 :(得分:0)

它必须是:-app.use('/admin', admin);(仅在第一部分附近引用)而不是:-app.use('/admin, admin);