我最近将所有路线代码都移到了单独的文件中,但现在我的路线分辨率不稳定了。这是一个简单的例子 -
我的app.js
const express = require('express');
const app = express();
var dataLoader = require('./routes/dataLoader');
app.all( '/api/load', dataLoader);
我的dataLoader.js
const express = require('express');
const router = express.Router();
router.get('/api/load', (req, res) => {
res.send('Hello Loader...');
});
router.get('/api/load/bob', (req, res) => {
res.send('Hello Loader - Bob...');
});
router.get('/api/load/jim', (req, res) => {
res.send('Hello Loader - Jim...');
});
module.exports = router;
/ api / load工作正常,而/ api / load / jim和/ api / load / bob都会导致:
Cannot GET /api/load/jim (or Cannot GET /api/load/bob, respectively)
我使用app.all()而不是app.use(),因为我遇到了解决主路径的问题" / api / load",使用all似乎解决了这个问题,但现在我不确定。
"引擎":{ "节点":" ^ 8.9.1" }, "依赖":{ " bluebird":" ^ 3.5.1", "身体解析器":" ^ 1.15.1", "表达":" ^ 4.13.4", " mongoose":" 4.9.8" } 有什么建议?
答案 0 :(得分:1)
执行此操作时:
app.all( '/api/load', dataLoader);
然后,在dataLoader
路由器中,您可以定义如下路由:
router.get('/api/load', (req, res) => {
res.send('Hello Loader...');
});
您实际所做的是为api/load/api/load
定义路线,这可能不是您想要的路线。路径是累积的。
app.use()
语句应该具有适用于整个路由器的任何公共前缀,然后路由器本身的路径应该相对于此。此外,您应该使用app.use()
,而不是app.all()
来使用路由器。
因此,在您的情况下,将dataLoader
路由器更改为:
// whole router is configured at /api/loader
const router = require('express').Router();
router.get('/', (req, res) => {
res.send('Hello Loader...');
});
router.get('/bob', (req, res) => {
res.send('Hello Loader - Bob...');
});
router.get('/jim', (req, res) => {
res.send('Hello Loader - Jim...');
});
module.exports = router;