expressJS路由问题,简单的东西没有解决

时间:2017-12-17 21:17:04

标签: express express-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似乎解决了这个问题,但现在我不确定。

"引擎":{         "节点":" ^ 8.9.1"     },     "依赖":{         " bluebird":" ^ 3.5.1",         "身体解析器":" ^ 1.15.1",         "表达":" ^ 4.13.4",         " mongoose":" 4.9.8"     } 有什么建议?

1 个答案:

答案 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;