我想在一个对象上使用querystring.stringify。字符串的要求略有不同,星号、斜杠和撇号都需要转义。querystring不会转义这些字符(通常不需要),但文档指出querystring.escape是公开的,以便我们可以用自己的函数覆盖它。以下内容适用于我:
我的唯一担忧是,如果我理解正确的话,这可能会改变其他模块的行为,这些模块将来也可能需要使用querystring(带有其正常转义函数)。node.js文档表示,模块只加载一次,并返回原始实例以供后续的require调用。是否有一种方法可以强制使此特定实例的querystring成为唯一的?
显然,我可以编写一个包装器,在传统的querystring.stringify调用之后执行替换,但我很好奇,因为对我来说,标准节点模块似乎真的有一个“全局”设置,除非实际上有一种方式要求unique instance。
querystring.escape = function(str) {
str = encodeURIComponent(str)
.replace(/\*/g, '%2A')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29')
.replace(/'/g, '%27');
return str;
};
我的唯一担忧是,如果我理解正确的话,这可能会改变其他模块的行为,这些模块将来也可能需要使用querystring(带有其正常转义函数)。node.js文档表示,模块只加载一次,并返回原始实例以供后续的require调用。是否有一种方法可以强制使此特定实例的querystring成为唯一的?
显然,我可以编写一个包装器,在传统的querystring.stringify调用之后执行替换,但我很好奇,因为对我来说,标准节点模块似乎真的有一个“全局”设置,除非实际上有一种方式要求unique instance。