我想在一个对象上使用 querystring.stringify。对字符串的要求有点不合标准,星号、斜线和撇号都需要转义。Querystring 不会转义这些(它们通常不需要),但文档说 querystring.escape 是专门公开的,因此我们可以用我们自己的函数覆盖它。以下内容对我有用:
querystring.escape = function(str) {
str = encodeURIComponent(str)
.replace(/\*/g, '%2A')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29')
.replace(/'/g, '%27');
return str;
};
我唯一担心的是,如果我理解正确,这可能会改变其他模块的行为,这些模块将来也可能需要查询字符串(具有正常的转义函数)。node.js 文档说模块只加载一次,原始实例返回给后续的 require 调用。有没有办法让我强制这个特定的查询字符串实例是唯一的?
显然,我可以编写一个包装器,在对 querystring.stringify 的常规调用之后进行替换,但我很好奇,因为在我看来,标准节点模块确实具有“全局”设置似乎很奇怪,除非实际上有某种方式毕竟需要一个唯一的实例。