【问题标题】:optional extension in expressjs routeexpressjs 路由中的可选扩展
【发布时间】:2015-03-02 14:18:02
【问题描述】:

我想要一个可选的扩展名,例如.xml.csv.json(默认情况下,没有扩展名会返回 json)。

app.get('/days-ago/:days(.:ext)?', function(req, res) {

这似乎不起作用,我做错了什么吗?

GET /days-ago/7.xml
GET /days-ago/7.csv
GET /days-ago/7.json
GET /days-ago/7

【问题讨论】:

    标签: node.js express routes


    【解决方案1】:

    您的路线似乎使用了错误的模式。这是更正后的:

    app.get('/days-ago/:days\.:ext?', function(req, res) {
    

    因此,为了实现您的目标,我将创建一个中间件来检查空参数并将其设置为所需的参数

    类似这样的:

    var defaultParamMiddleware = function(req, res, next) {
        if (!req.params.ext) {
            req.params.ext = 'json';
        }
    
        next();
    };
    
    app.get('/days-ago/:days\.:ext?', defaultParamMiddleware, function (req, res) {
        res.json(req.params);
    });
    

    【讨论】:

      【解决方案2】:

      尝试真正的正则表达式:app.get(/\/days-ago\/\w+(\.\w+)?/), function (req, res {...(或类似的)。路由参数内置语法非常有限。它实际上可能能够表达您的需求,但是我看不出将正则表达式内置到语言中并且很好理解的意义。

      【讨论】:

      • 如何获取参数?
      • req.params 是一个数组
      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      相关资源
      最近更新 更多