【问题标题】:Using express.Router() with multiple urls and optional parameters使用带有多个 url 和可选参数的 express.Router()
【发布时间】:2016-09-10 07:38:34
【问题描述】:

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

当我在 results_api.js 中取出“/”的路由时,“made it to 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

与我的很接近,但没有中间参数(在我的例子中,在 '/api' 之后是 '/zip/')。这是否表明我正在尝试做的只是构建我的 api 的错误方式?

【问题讨论】:

    标签: javascript angularjs node.js express routing


    【解决方案1】:

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

    【讨论】:

    • 我实际上已经尝试过了,'/' 仍然是被使用的处理程序。当我在“/”处理程序中控制台记录 req.baseUrl 时,我得到“/api/zip/78728”,所以我知道 url 构造正确。
    • 在我有机会测试后更新了答案:/
    • 就是这样!谢谢,我之前实际上曾尝试省略 ht '/*' 但我没有正确设置我的处理程序,并且当时确信我的处理程序是问题所在。
    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2016-02-28
    • 2012-11-06
    • 2012-04-22
    • 2014-02-16
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多