我想在对象上使用 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 之后进行替换,但我很好奇,因为标准 Node 模块真的有一个“全局”设置对我来说似乎很奇怪,除非有毕竟,实际上是某种需要唯一实例的方法。
最佳答案
Is there a way for me to force this particular instance of querystring to be unique?
不是真的。 Node 的 module caching是每个进程并且 based on the module's filepath .
更改不会跨入/跨出 Child Processes或 Clusters .因此,您可以通过其中之一将脚本与其自己的 querystring 隔离。
但是,在同一个进程中,Node 没有提供官方方法来绕过它来为单个模块检索唯一实例。
this might change the behavior of other modules that might also require querystring (with its normal escape function) in the future.
好吧,如果 URL 编码的值有额外的编码字符,它仍然有效。只是通常他们不需要。
而且,我想,有可能影响将期望放在编码值上的模块。但是,这通常是一个奇怪的选择(异常(exception)情况是对您自己的 querystring.escape 进行单元测试)。所以,只要能正常解码,应该没问题。
querystring.escape = function (str) { /* ... */ }; // your function here
var sample = "a(b*c)'d";
var encoded = querystring.escape(sample);
console.log(encoded); // a%28b%2ac%29'd
var decoded = querystring.unescape(encoded);
console.log(decoded); // a(b*c)'d
console.log(decoded === sample); // true
并且,能够覆盖 querystring.escape和 querystring.unescape是设计使然:
The escape function used by
querystring.stringify, provided so that it could be overridden if necessary.
关于javascript - 在单个模块中覆盖 node.js querystring.escape,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983532/
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co