Node.jsexpression嵌套的路由

我是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中的configuration,我无法启动服务器,但是当我尝试点击http://localhost/help/test时,我所做的任何更改都会导致404错误

我认为你的一些困惑来自app.jsrequire 。 我们来看看这一行:

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

该行将模块加载到routes/help.js 。 该文件不存在在您当前的configuration中。 将您的./routes/index.js文件重命名为./routes/help.js

由于上述文件只能处理以/help和not /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定义了一个path,并且您在/help/testuse ”了该path,所以该path的最终path将为: /help/test/test

Tim的回答让我走上了正确的轨道,但是我最终用一个稍微不同的解决scheme,用他想回答的答案:

在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