2016-05-14 64 views
1

我在使用express.Router()麻煩我婉,我不相信我的問題是,什麼樣的方式使用express.Router()。我的問題是,當我做一個GET請求的URL「/ API/ZIP」或「/ API/ZIP /」 +拉鍊,其中拉鍊是一個數字的郵政編碼,那被擊中的唯一途徑是「/」,在下面的例子中記錄了'$$$$$$$$$$$$'。有多個URL和可選參數

當我拿出路線「/」在results_api.js,「去到server.js」被記錄,但我沒有得到任何results_api.js。讓我知道是否需要發佈更多上下文代碼。我正在使用Angular前端,但我假設由於我的請求總是到達server.js(通過'將其設置爲server.js'進行驗證),所以我的問題在results_api.js中。

我已經使用之前此路由方法,我不知道什麼是圍繞走錯了這個時候。如何管理打routes.get('/ ZIP /:拉鍊......

在我server.js文件:

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

//route to index.html 
var assetFolder = Path.resolve(__dirname, '../client/'); 
routes.use(express.static(assetFolder)); 

//api routes 
routes.use('/api/*', require(‘./api/results_api.js’), function(){ 
console.log('made it to server.js')}); 

我results_api.js文件:

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

router.get('/', function(req, res){ 
    console.log('$$$$$$$$$$$$$$$') 

}); 

router.get('/zip', function(req, res){ 
    console.log(‘###################’) 

}); 

router.get('/zip/:zip', function(req, res){ 
    console.log('%%%%%%%%%%%%%%%%%') 

}); 

module.exports = router; 

這個問題:

express.Router() get url route with optional parameters

是貼近我,但沒有中間參數(在我的情況「/ zip /'在'/ api'之後)。這是否表明我正在嘗試做的僅僅是構建我的api的錯誤方式?

回答

2

稱這些處理器以相反的順序。然後 /zip,然後 /

其實,問題是這一行:/api/

routes.use('/api/*', require(‘./api/results_api.js’), function(){ 
console.log('made it to server.js')}); 

/api/*將「吞噬」什麼,所以你的路由器會認爲它被稱爲與/。將其更改爲:

routes.use('/api', require('./api/results_api.js'), function() { 
    console.log('made it to server.js') 
}); 
+0

我已經嘗試過,'/'仍然是使用的處理程序。當我在'/'處理程序內部登錄req.baseUrl時,我得到'/ api/zip/78728',所以我知道url正在正確構建。 – swoopedj

+0

更新了答案,我有機會測試了這一點之後:/ – panta82

+1

這是它!謝天謝地,我實際上已經嘗試過忽略ht'/ *',但是我沒有正確設置我的處理程序,並且在那個時候確信我的處理程序是問題所在。 – swoopedj