2017-04-04 11 views
1

私はアイデアが一緒に含まれているAPIの各部分を維持することである次のような構造エクスプレスルーティング別離

src 
|-app.js 
|-api 
    |-v1 
     |-index.js 
    |-users 
     |-routes.js 
     |-controller.js 
     |-tests.js 
    |-currency 
     |-routes.js 
     |-controller.js 
     |-tests.js 

を持つようにセットアップに私の急行ルーティングをしようとしています。

index.jsは基本的に、それが所属するディレクトリのサブフォルダ内のすべてのroutes.jsファイルを識別し、必要に応じてエクスプレスルータに要求し、app.jsを適切なバージョンとして必要とします。 API。私はそれをデバッグしようとしました

app.js

app.use('/api/v1', require('./api/v1')); 

API/V1/index.js

/*jslint node: true */ 
"use strict"; 

var express = require('express'); 
var router = express.Router(); 
var fs = require('fs'); 

fs.readdirSync(__dirname).forEach(function(file) { 

    // Remove extension from file name 
    var basename = file.split('.')[0]; 

    // Only load files that aren't directories and aren't blacklisted 
    if (fs.lstatSync(__dirname + '/' + file).isDirectory()) { 
     console.log("api: " + '/' + basename + ' file: ./' + file + '/routes.js');  
     router.use('/' + basename, require('./' + file + '/routes.js')); 
    } 

}); 

module.exports = router; 

API/V1 /通貨/ routes.js

/*jslint node: true */ 
"use strict"; 

// ******************* 
// Currency Routes 
// ******************* 

var express = require('express'); 
var router = express.Router(); 

router.get('/currency', function (req, res) { 
    res.send('Currency List Page'); 
}); 

router.get('/currency/:id', function (req, res) { 
    res.send('Currency Page: ' + req.params.id); 
}); 

module.exports = router; 

DEBUGモジュールを使って、expressがルートを認識できることが分かります。

C:\DevelopmentOE\Node\src>set DEBUG=express:* & node ./bin/www.js 
    express:application set "x-powered-by" to true +0ms 
    express:application set "etag" to 'weak' +3ms 
    express:application set "etag fn" to [Function: wetag] +2ms 
    express:application set "env" to 'development' +0ms 
    express:application set "query parser" to 'extended' +0ms 
    express:application set "query parser fn" to [Function: parseExtendedQueryString] +1ms 
    express:application set "subdomain offset" to 2 +0ms 
    express:application set "trust proxy" to false +0ms 
    express:application set "trust proxy fn" to [Function: trustNone] +1ms 
    express:application booting in development mode +0ms 
    express:application set "jsonp callback name" to 'callback' +0ms 
    express:router use '/' query +16ms 
    express:router:layer new '/' +0ms 
    express:router use '/' expressInit +1ms 
    express:router:layer new '/' +0ms 
    express:router use '/' jsonParser +0ms 
    express:router:layer new '/' +0ms 
    express:router use '/' urlencodedParser +4ms 
    express:router:layer new '/' +1ms 
api: /currency file: ./currency/routes.js 
    express:router:route new '/currency' +5ms 
    express:router:layer new '/currency' +1ms 
    express:router:route get '/currency' +0ms 
    express:router:layer new '/' +1ms 
    express:router:route new '/currency/:id' +0ms 
    express:router:layer new '/currency/:id' +1ms 
    express:router:route get '/currency/:id' +0ms 
    express:router:layer new '/' +0ms 
    express:router use '/currency' router +1ms 
    express:router:layer new '/currency' +0ms 
api: /users file: ./users/routes.js 
    express:router:route new '/user' +3ms 
    express:router:layer new '/user' +0ms 
    express:router:route get '/user' +1ms 
    express:router:layer new '/' +0ms 
    express:router:route new '/user/:id' +0ms 
    express:router:layer new '/user/:id' +0ms 
    express:router:route get '/user/:id' +1ms 
    express:router:layer new '/' +0ms 
    express:router use '/users' router +0ms 
    express:router:layer new '/users' +1ms 
    express:router use '/info' <anonymous> +0ms 
    express:router:layer new '/info' +1ms 
    express:router use '/api/v1' router +0ms 
    express:router:layer new '/api/v1' +0ms 
    express:router use '/' <anonymous> +1ms 
    express:router:layer new '/' +0ms 
    express:router use '/' <anonymous> +0ms 
    express:router:layer new '/' +1ms 
    express:application set "port" to 3000 +3ms 

しかし、私はhttp://localhost:3000/api/v1/currencyにアクセスしようとすると、私は次のよう{ "メッセージ": "Not Found" や "エラー":{ "ステータス":404}}取得します。

誰でも意見や提案があります。

おかげ

ポール私が見ることができるものから、

答えて

1

、あなたはこれらのルートを定義する必要があり/api/v1/currency/currency

api/v1/currency/routes.jsを定義している:

router.get('/', ...); 
router.get('/:id', ...); 
+0

が、私はそれを得ました。助けてくれてありがとう。私はそれを見ることができませんでした。 –

関連する問題