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;