0

我最近将所有路线代码移到单独的文件中,但现在我的路线分辨率参差不齐。这是一个简单的例子 -

我的 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”},“依赖项”:{“蓝鸟”:“^3.5.1”,“正文解析器”:“^1.15.1”,“快递”: "^4.13.4", "mongoose": "4.9.8" } 有什么建议吗?

4

1 回答 1

1

当你这样做时:

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;
于 2017-12-18T00:57:27.340 回答