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) 

メイン パス「/api/load」の解決に問題があったため、app.use() の代わりに app.all() を使用しています。

"engines": { "node": "^8.9.1" }, "dependencies": { "bluebird": "^3.5.1", "body-parser": "^1.15.1", "express": "^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()ルーター全体に適用される共通のプレフィックスが含まれている必要があり、ルーター自体のパスはそれに対する相対パスである必要があります。また、ルーターapp.use()ではなく、 using を使用する必要があります。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 に答える