模块系统
CommonJS(cmd规范) -- 同步加载
exports、module.exports、require('./xx.js')
加载方式(只会加载一次)
相对路径(./)或绝对路径(../)
模块名找寻方式:(npm包下载默认名)
node_modules->父目录node_modules->NODE_PATH
exports 暴露一部分
// 在a.js中
exports.A = class A{
static fn (){
console.log('这是A的静态方法');
}
};
let B = '局部不暴露的B';
exports.C = function () {
console.error('暴露的C');
};
// 在testNodejs.js引入
'use strict'
let a = require('./a.js');
a.A.fn(); //这是A的静态方法
console.log(a.b); //undefined
a.C();//暴露的C
module.exports 暴露全部
// 在b.js中
var exports =module.exports = class B{
static fn (){
console.log('这是静态方法');
}
f(){
console.log('这是普通方法!')
}
};
exports.C = '暴露的变量';
// 在testNodejs.js引入
const B = require('./b.js');
B.fn();//这是静态方法
new B().f(); //这是普通方法!
console.error(B.C);//暴露的变量
npm 模块管理工具
npm是随同nodeJS一起安装的包管理工具,能解决nodejs代码部署上的很多问题
首先cd '需要安装的目录'
设置npm镜像为淘宝镜像
npm config set registry https://registry.npm.taobao.org
备注 : 常用的npm命令
npm init (一直回车就可生成package.json文件)
npm install xxx 安装模块
npm install xxx -S(或者--save)安装模块
会安装到package.json文件中,这样打包给别人。
就可以通过npm install安装所有的依赖模块
npm install xxx -g 将模块安装到全局环境中
//多用于安装webpack,grunt,node-supervisor(nodejs 热处理)
npm ls 查看安装的模块及依赖
npm ls -g 查看全局安装的模块及依赖
npm uninstall xxx (-g) 卸载模块
npm cache clean 清理缓存
现在来试试一个替代jQuery,在nodejs中运行的模块–cheerio
jquery对象必须是window,node的全局对象是global,所以出现类似jquery的模块cheerio
但是,cheerio只提供类似JQ的查找元素方式 -- 可做网络抓取
如果你需要使用jQuery。先下载npm install jquery@1 (代表1的版本,默认下载最新3)
可以 window.$ = window.jQuery =require('jquery');
var http = require('http');
var cheerio = require('cheerio');
var $ = cheerio.load('<html><body><div><span>测试</span></div></body></html>');
console.error($('span').text()); //测试
console.error($('div').html()); //<span>测试</span>
http.get({host: 'www.baidu.com'}, function (response) {
response.on('data', function (data) {
var $ = cheerio.load(data.toString());
console.log($('a').attr('href'));
// //www.baidu.com/gaoji/preferences.html
})
});
webSocket
安装npm install ws
在testWebSocket.js中
"use strict";
var ws = require('ws');
var servicer = new ws.Server({port:41233});//创建server
//client 拿到所有的链接的数组,用于群发 --
// 应用会更新一个带登录注册demo
/*function sendAll(str) {
for (let skt of servicer.clients) {
skt.send(str); //str代表要发送的数据
}
}*/
//socket得到webSocket链接
servicer.on('connection',function (socket) {
console.log('连接上了');
socket.on('message',function (data) {
console.log(data);
socket.send('已经接收的消息:'+data);
});
socket.on('close',function () {
console.log('一个链接断开');
socket.close();
});
});
在testWebSocket.html文件中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test ws</title>
</head>
<style>
div{ width: 200px;height: 400px;color: #e4393c;
font-size: 14px;}
</style>
<body>
<input><button>发送</button>
<div></div>
<script>
var div = document.getElementsByTagName('div')[0];
var inp = document.body.children[0];
var btn = document.body.children[1];
var ws = new WebSocket('ws://localhost:41233');
ws.onmessage = function (o) {
var p = document.createElement('p');
p.innerHTML = o.data;
div.appendChild(p);
}
btn.onclick = function () {
ws.send(inp.value);
inp.value = '';
}
</script>
</body>
</html>