Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
expressJS路由问题,简单的东西无法解决_Express_Express Router - Fatal编程技术网

expressJS路由问题,简单的东西无法解决

expressJS路由问题,简单的东西无法解决,express,express-router,Express,Express Router,我最近把我所有的路由代码移到了不同的文件中,但现在我的路由解析不稳定。这里有一个简单的例子- 我的app.js const express = require('express'); const app = express(); var dataLoader = require('./routes/dataLoader'); app.all( '/api/load', dataLoader); My dataLoader.js const express = require('express

我最近把我所有的路由代码移到了不同的文件中,但现在我的路由解析不稳定。这里有一个简单的例子-

我的app.js

const express = require('express');
const app = express();

var dataLoader = require('./routes/dataLoader');
app.all( '/api/load', dataLoader);
My 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”, “猫鼬”:“4.9.8” } 有什么建议吗

执行此操作时:

app.all( '/api/load', 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;

您刚刚为
/api/load/api/load
定义了一个路由。我怀疑那是你想要的。另外,您可能想使用
app.use(path,router)
,而不是
app.all(path,router)
。只使用
router.get('/bob')
?我觉得这应该是相对于你在app.allAnd中提供的内容而言的。是的,如果有疑问,就使用app.use-我从来没有感觉到需要使用app.all。我个人理解你的所有建议,我同意,这是我期望它的表现,我会再试一次,然后在3分钟后返回给你。好的-这似乎正在工作-使用app.use()和/吉姆。我不知道为什么在我尝试这样做的时候它不起作用…可能是我的代码中有其他不稳定的东西。谢谢。谢谢,当我第一次将代码转移到路由文件时,我确实尝试过这样做——但它出错了,或者找不到“cant Found GET…”路由,但我想我在其他地方遇到了一个错误,后来我修复了这个错误,没有再回去尝试。