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.js
的require
。 我们来看看这一行:
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/test
“ use
”了该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