expressJS 路由问题,简单的东西无法解决
expressJS routing issue, simple stuff not resolving
我最近将所有路由代码移到了单独的文件中,但现在我的路由分辨率参差不齐。这是一个简单的例子 -
我的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 似乎解决了这个问题,但现在我不确定。
"engines":{
"node": "^8.9.1"
},
"dependencies":{
"bluebird": "^3.5.1",
"body-parser": "^1.15.1",
"express": "^4.13.4",
"mongoose": "4.9.8"
}
有什么建议么?
当你这样做时:
app.all( '/api/load', dataLoader);
然后,在 dataLoader
路由器中,您可以这样定义路由:
router.get('/api/load', (req, res) => {
res.send('Hello Loader...');
});
您实际做的是为 api/load/api/load
定义一条路线,这可能不是您想要的。路径是累积的。
app.use()
语句应具有适用于整个路由器的任何通用前缀,然后路由器本身上的路径应与此相关。此外,您应该使用 using 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;
我最近将所有路由代码移到了单独的文件中,但现在我的路由分辨率参差不齐。这是一个简单的例子 -
我的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 似乎解决了这个问题,但现在我不确定。
"engines":{ "node": "^8.9.1" }, "dependencies":{ "bluebird": "^3.5.1", "body-parser": "^1.15.1", "express": "^4.13.4", "mongoose": "4.9.8" } 有什么建议么?
当你这样做时:
app.all( '/api/load', dataLoader);
然后,在 dataLoader
路由器中,您可以这样定义路由:
router.get('/api/load', (req, res) => {
res.send('Hello Loader...');
});
您实际做的是为 api/load/api/load
定义一条路线,这可能不是您想要的。路径是累积的。
app.use()
语句应具有适用于整个路由器的任何通用前缀,然后路由器本身上的路径应与此相关。此外,您应该使用 using 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;