【问题标题】:Express Routes - Issues with multiple filesExpress Routes - 多个文件的问题
【发布时间】:2015-06-01 09:19:25
【问题描述】:

我开始使用 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 很好用,它正确返回了翡翠模板 'index'。

我正在尝试在不同的文件中为“admin”模板(位于“./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;

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

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

【问题讨论】:

    标签: javascript node.js express routes


    【解决方案1】:

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

    【讨论】:

      【解决方案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'
        });
      });
      

      或者在 routes/admin 中插入这个函数:

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

      【讨论】:

      • 感谢您的回答,它有效。但是@dc2 说了一些有趣的话:在每个文件中调用expressRouter 实例是否有问题?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 2011-11-21
        • 2013-12-16
        • 2018-09-04
        • 2013-11-23
        • 2012-12-22
        • 1970-01-01
        相关资源
        最近更新 更多