【问题标题】:Mongodb reverse match API endpoint pathMongodb反向匹配API端点路径
【发布时间】:2019-08-07 21:01:38
【问题描述】:

试图建立一个 webhook 系统,用户可以通过提供一个方法和一个端点来监听我的 express 服务器的任何方法(例如PUT /movies/*)。这会将编辑后的电影发送到用户的回调 url。

我在这里面临的挑战是:

  1. 不强制用户编写完整的正则表达式(例如 bash 通配符是理想的,或者节点 path-to-regexp 库的工作方式)
  2. 在调用端点时检索与端点匹配的所有钩子

我真的不确定如何处理第一点,但是我能够使用此处提供的解决方案来检索我的 webhook MongoDB reverse regex

  private static async getWebhooks(endpoint: string, method: string): Promise<any[]> {
    return await MongoDb.Instance.Models.Webhook.find({
      $where: `"${endpoint}".match(this.endpoint)`,
      method: method,
    });
  }

这并不完全按预期工作。假设 GET /movies/* 匹配 GET /movies 和 GET /movies/:movieId 端点,但它应该只匹配后者。

【问题讨论】:

    标签: node.js regex mongodb typescript


    【解决方案1】:

    好吧,我只是睡眠不足,我走错了路。

    一种解决方案是在注册 webhook 时仅在用户提供的端点上调用 path-to-regexp 方法,这样一个真实的表达式将存储在端点旁边但对用户隐藏。

    import * as pathToRegexp from 'path-to-regexp';  
    
    public async Create(webhook: IWebhook): Promise<any> {
      let pattern = pathToRegexp(webhook.endpoint.original, []);
      webhook.endpoint.pattern = pattern;
    
      const createdWebhook = await MongoDb.Instance.Models.Webhook.create(webhook);
    
      this.setStatus(201);
      return createdWebhook;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多