使用express.Router()与多个url和可选参数

我遇到麻烦,使用express.Router()的方式,我wan,我不知道我的问题是什么。 我的问题是,当我对url'/ api / zip'或'/ api / zip /'+ zip发出GET请求时,其中zip是一个数字邮政编码,唯一被打的路由是'/',在下面的例子中logging了“$$$$$$$$$$$$”。

当我在results_api.js中取出'/'的路由时,'将其设置为server.js'被logging,但是我没有从results_api.js中得到任何东西。 让我知道如果我需要发布更多的上下文代码。 我正在使用一个Angular前端,但我假设,因为我的请求总是得到server.js(通过'使得server.js被logging'validation),我的问题是在results_api.js。

之前我已经使用过这个路由方法,但是不知道这次是怎么回事。 我如何设法打route.get('/ zip /: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()获取带有可选参数的url路由

是接近我的,但没有中间参数(在我的情况下'/ zip /'后'/ api')。 这是否表明我正在尝试做的只是构build我的api的错误方法?

以相反的顺序调用这些处理程序。 /zip/:zip ,然后/zip ,然后/

其实问题是这样的:

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

/api/*会在/api/之后“吞噬”任何东西,所以你的路由器会认为它是用/调用的。 将其更改为:

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