每当提交带有空格的标记时,空格在响应中显示为%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) )
});
答案 0 :(得分:1)
首先,这不符合您的期望:
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