代码之家  ›  专栏  ›  技术社区  ›  Shift 'n Tab

无法在ExpressJS路由器URL请求中保留特殊字符

  •  -1
  • Shift 'n Tab  · 技术社区  · 7 年前

    我尝试使用以下条件从数据库查询记录: 维生素+锌100毫克/10毫克/5毫升糖浆

    我的请求URL如下所示:

    http://localhost:4200/api/search?key=VITAMINS%20+%20ZINC%20100MG/10MG%20PER%205ML%20SYRUP
    

    这是我的快速路由器,看起来像:

    router.get('/search', (req, res, next) => {
      const query = req.query;
      console.log(query.key);
    
      .... omitted
    
    });
    

    问题是我不能保留 + 特殊字符,因此最终打印出的日志不是路由器中的原始条件。

    VITAMINS   ZINC 100MG/10MG PER 5ML SYRUP
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Ankit    7 年前

    就URI而言, + 角色是 reserved characters .

    当保留集中的字符(“保留字符”)具有 特定上下文中的特殊含义(“保留目的”),以及URI Scheme说有必要将这个字符用于其他人 目的,则字符必须进行百分比编码。

    在您的情况下,查询字符串需要进行百分比编码,然后才能访问客户端的URL:

    编码成分(“维生素+锌”)。

    然后在服务器端(即Express)使用 decodeURIComponent() .