2017-04-04 84 views
1

我想設置我的快遞路由具有以下結構快速路由分離 -

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

的想法是讓一起包含在API的各個部分。

我希望index.js能夠基本識別它所屬目錄的子文件夾中的所有routes.js文件,並根據需要將它們加入到express路由器中,然後通過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模塊一起,可以看到快速識別路線。

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我得到以下{ 「消息」: 「未找到」, 「錯誤」:{ 「地位」:404}}。

任何人有任何想法/建議。

感謝

保羅

回答

1

從我所看到的,你定義/api/v1/currency/currency

api/v1/currency/routes.js應該定義這些路線:

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

我知道了。謝謝您的幫助。我只是看不到它。 –