使用带有多个url和可选参数的express.Router()

时间:2016-05-14 00:51:27

标签: javascript angularjs node.js express routing

我在使用express.Router()方式遇到困难,并且不确定我的问题是什么。我的问题是当我向网址'/ api / zip'或'/ api / zip /'+ zip发出GET请求时,其中zip是一个数字邮政编码,唯一被点击的路线是'/',在下面的示例中记录'$$$$$$$$$$$$'。

当我在results_api.js中取出'/'的路径时,'将它发送到server.js'会被记录,但我从results_api.js中得不到任何东西。如果我需要发布更多上下文代码,请告诉我。我正在使用Angular前端,但我假设因为我的请求总是到达server.js(通过'将其记录到server.js'进行验证),我的问题在results_api.js中。

之前我使用过此路由方法,并且不确定这次出现了什么问题。如何设置命中routes.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() get url route with optional parameters

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

1 个答案:

答案 0 :(得分:2)

以相反的顺序调用这些处理程序。 /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')
});