兼容多种模块规范的 javascript 模块化写法
;(function(name,definition){
var hasDefine = typeof define === 'function', // 检测上下文环境是否为 AMD 或者 CMD
hasExports = typeof module !== 'undefined' && module.exports; // 检查上下文是否为 node
if(hasDefine){
define(definition); // AMD 或者 CMD 环境
}else if(hasExports){
module.exports = definition(); // 定义为普通 node 模块
}else{
this[name] = definition(); // 将模块的执行结果挂载在 window 变量中,在浏览器中 this 指向 window 变量。
}
})('hello',function(){ // 此处 hello 只是作为模块化的示例名称
var hello = function(){};
return hello;
})
不过此种写法要保证前端引用或者后端使用没有全局的 define 函数覆盖 AMD 或者 CMD 的 define 函数。
此代码来源于 深入浅出Node.js P45 2.7.4,此处为记录以及熟悉。
最近开始学习 Nodejs ,但是机子上已经有了 apache ,所以为了跑 Node ,要不就是停用 Apache 以使 Node 可以使用 80 端口,要不就是给 Node 使用另外的端口号,例如:8080,虽然,在本机上可以这么访问,但是如果放在公网上,让用户可以访问的话,如果不使用 80 端口,看起来总是不像一个可以实际使用的网站。可是如果 Node 使用 80 端口的话,就只能停掉 Apache 的网站,两者不能兼顾。那么有没有方法可以使 Node 和 Apache 在一个服务器上同时提供服务,并且都只使用域名而不用加端口号访问呢?答案是肯定的!
那么就来看,如何实现:
1. 首先,在 Apache 的配置文件中,打开 mod_proxy 和 mod_proxy_http 至于其他的自己看着打开就好,例如需要 FTP 的话就打开相应的 FTP 选项。即:去掉 httpd.conf 中的
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
这两行前面的 # 号即可。
2. 配置虚拟主机,增加下面的代码:
<VirtualHost *:80>
ServerName node.js
ServerAlias www.node.js
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:8080/
ProxyPassReverse http://localhost:8080/
</Location>
</VirtualHost>
此处 node.js 和 www.node.js 为绑定的要访问 Node 服务的域名。http://localhost:8080/ 为服务器上访问 Node 的网址和端口号,这里以 8080 为例。
3. 打开你的 Node 服务,然后重启 Apache ,访问 node.js 这时候你就可以看到用 Node 提供服务的网站了。
其实原理就是使用 Apache 做代理服务器而已。
如果使用的是 Nignx 的话,也可以用同样的原理来实现,但是我只用了 Apache ,就没有尝试着去做 Nignx。当然了,其他服务器也一样。