【发布时间】:2011-05-21 05:58:27
【问题描述】:
使用 Node.js 的一个理论上的好处是可以在客户端和服务器之间共享相同的脚本。如果客户端不支持 javascript,则可以将相同的功能降级到服务器。
但是,Node.js require() 方法可以独立运行。在您加载的脚本中,您可以向this 或exports 添加内容,这些内容稍后将在获取脚本的对象中可用:
var stuff = require('stuff');
stuff.show();
在 stuff.js 中:
this.show = function() {
return 'here is my stuff';
}
因此,当在客户端上重新使用此脚本时,.show() 方法将被添加到window 范围内。这不是我们想要的,而是我们想将它添加到自定义命名空间中。
到目前为止,我唯一的解决方案是(在 stuff.js 中):
var ns = typeof exports == 'undefined' ? (function() {
return window['stuff'] = {};
})() : exports;
ns.show = function() {
return 'here is my stuff';
}
delete ns; // remove ns from the global scope
这很好用,因为我可以在服务器和客户端上调用stuff.show()。但它看起来很古怪。我尝试寻找解决方案,但 node.js 仍然很新(甚至对我来说),所以几乎没有可靠的资源。有没有人知道如何解决这个问题?
【问题讨论】:
标签: javascript scope client-server node.js