Node.js express嵌套路由

3

我刚接触Node.js和Express,并尝试通过一些教程来学习。我已经能够实现基本的路由,例如一级深度(例如:http://localhost/help),但是我无法使其在两级深度下工作(例如:http://localhost/help/test)。

以下是app.js中相关的代码:

var help = require('./routes/help');

// also tried this
//var help_test = require('./routes/help/test');

var app = express();
app.use('/help', help);
app.use('/help/test', help.test);

// also tried this
//app.use('/help/test', test);
//app.use('/help/test', help_test);

在routes目录下,我有两个文件:index.js和test.js。
index.js包含以下内容:
var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
  res.send('help');
});

module.exports = router;

test.js文件包括:

var express = require('express');
var router = express.Router();


router.get('/test', function(req, res) {
  res.send('help test!');
});

module.exports = router;

目前由于app.js中的配置问题,我无法启动服务器,但是我所做的任何更改都会导致404错误,当我尝试访问http://localhost/help/test时。

2个回答

2

我认为你的一些困惑来自于 app.js 中的 require。让我们看看这一行:

var help = require('./routes/help');

这行代码会加载 routes/help.js 模块。但是在你当前的配置中,该文件不存在。请将你的 ./routes/index.js 文件重命名为 ./routes/help.js

由于上述文件只处理以 /help 为前缀的路由而不是 /help/test,因此需要添加额外的 require

var help_test = require('./routes/test');

你的app.js文件现在应该包含以下内容:

var help = require('./routes/index');
var help_test = require('./routes/test');

var app = express();
app.use('/help', help);
app.use('/help/test', help_test);

需要注意的是,由于您的 help_test 模块在 /test 路径下定义,并且您在 /help/test 处"使用"它,因此该路由的最终路径将为:/help/test/test

1

蒂姆的回答让我找到了正确的方向,但最终我使用他的答案得出了稍微不同的解决方案,现在我想分享一下:

在 app.js 中,我有以下代码:

var help = require('./routes/help');
var help_test = require('./routes/help/test');
....
app.use('/help', help);
app.use('/help/test', help_test);

/routes目录下,我有以下结构:
routes
|-- help
    |-- index.js
    |-- test.js

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接