javascript - Node Express 中的 URL 参数重写

标签 javascript node.js express

只要提交带有空格的标记,空格就会在响应中显示为 %20。我将如何重写每个空格,以便在请求和响应中它可以是破折号?有没有可靠的图书馆?谢谢!

路线

 router.get('/search/:tag', function(req, res) {
      const tag = req.params.tag;
      tag.toLowerCase();
      shopify.article.list(86289414)
      .then(function (response) {
        response.reverse();

        response = response.map(function(element) {
            return {
              author: element.author,
              blog_id: element.blog_id,
              body_html: element.body_html,
              created_at: element.created_at,
              handle: element.handle,
              id: element.id,
              image: element.image,
              published_at: element.published_at,
              summary_html: element.summary_html,
              tags: element.tags.toString().toLowerCase(),
              template_suffix: element.template_suffix,
              title: element.title,
              updated_at: element.updated_at,
              user_id: element.user_id
            }
        })


        response = response.filter(function(item) {
         return item.tags.indexOf(tag) > -1;
       });

        var data = {
          articles: response.map((article) => {
            return {
              author: article.author,
              id: article.id,
              html: article.body_html,
              tags: article.tags.split(","),
              date: moment(article.published_at).format("Do MMM YYYY"),
              slug: article.handle,
              title: article.title,
            } // return
          }) // map
        } // data

          console.log(data);
          res.render('blog-tags' , data);

      }) // then
        .catch(err => console.log(err) )
    });

最佳答案

首先,这不会达到您的预期:

tag.toLowerCase();

您需要使用:

tag = tag.toLowerCase();

如果您希望更改 tag 变量中的值。

这是因为 JavaScript 中的字符串是不可变的,任何操作都无法更改字符串,只能用新字符串替换变量的值。像 .toLowerCase() 这样的方法总是返回一个新字符串。

现在,如果您的变量已经包含“%20”等,那么您需要使用:

tag = decodeURIComponent(tag);

但请注意,这可能已经由框架处理。

现在,要将空格更改为下划线,请使用:

tag = tag.replace(/ /g, '_');

您可以将所有这些组合为:

tag = decodeURIComponent(tag).toLowerCase().replace(/ /g, '_');

或者如果你的变量已经包含解码的字符串:

tag = tag.toLowerCase().replace(/ /g, '_');

示例:

let tag = 'Aaa%20BbB%20cCC';
tag = decodeURIComponent(tag).toLowerCase().replace(/ /g, '_');
console.log(tag);
// prints: aaa_bbb_ccc

关于javascript - Node Express 中的 URL 参数重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43144094/

相关文章:

node.js - 如何从AWS Api Gateway获取根路径 "/"资源?

node.js - LESS 在 Express Js 中不起作用

node.js - 如何在 Express 中编写一个函数,该函数在作为 API 调用时可以返回 JSON,但也可以在不使用 Axios/Fetch 的情况下在内部调用?

javascript - Mocha Chai - 确认 Body 中有一个 'name' 属性

javascript - 从 css 调整大小图像创建 Canvas ,在其上维护浏览器插值

javascript - 如何将地理位置(通过 Googlemaps 显示)保存在本地存储中并稍后加载

javascript - 什么将解决 WebDriverError : Connection refused error message?

javascript - 如果至少一行具有特定类别,则表头中的切换按钮

node.js - 如何在通过 Azure Active Directory 生成授权 token 时修复 'connect ETIMEDOUT'?

node.js - 尝试将 bcrypt 安装到 Node 项目 + Node 设置问题