外观
nodejs
1226字约4分钟
nodejs
2020-05-06
安装
linux
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum -y install nodejsmac
brew install node模块
全局环境配置
- window
npm config set prefix "D:\Program Files\nodejs\node_global"npm config set cache "D:\Program Files\nodejs\node_cache"PATH D:\Program Files\nodejs\node_global\
- Mac
sudo npm config set prefix "/usr/local/node_global"sudo npm config set cache "/usr/local/node_cache"
命令
- 查看版本
npm -v - npm升级
npm install npm -g - npm安装模块
npm install <module_name> -g - npm卸载模块
npm uninstall <module_name> - npm更新模块
npm update <module_name> - npm查看模块
npm list -g - npm搜索模块
npm search <module_name> - 安装淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org - 安装style-loade
npm install style-loader css-loader --save-dev - 清空缓存
npm cache clean --force - 校验缓存
npm cache verify
语法
安装
* node版本 `node -v`
* npm版本 ` npm -v`
* 查看node安装位置 `where node`
* 安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org`
* 查看文件夹下安装的模块 `npm list --depth=0`
* 查看全局安装的模块 `npm list --depth=0 -global`
* 安装模块 `npm install xxx`
* 安装全局模块 `npm install -g xxx`
* 卸载模块 `npm uninstall xxx`
* 卸载全局模块 `npm uninstall -g xxx`
* 设置本地仓库 `npm config set prefix "D:\Program Files\nodejs\node_global"``
* 设置缓存 `npm config set cache "D:\Program Files\nodejs\node_cache"``
* 查看镜像站点 `npm config get registry`
* 启动服务 `npm run serve`
Hello World
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8888);
console.log("Service run at http://127.0.0.1:8888")交互解释器(REPL)
- 计算
- 属性
- 方法
- 回调函数
- 阻塞实例
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log('程序执行结束');- 非阻塞实例
var fs = require('fs');
fs.readFile('input.txt', function(err, data) {
if (err) {
console.error(err)
} else {
console.log(data.toString());
}
});
console.log('程序执行结束');事件
* 循环 `观察者模式 `事件相当于主题 事件处理函数相当于观察者
* EventMitter对象
* 实例
```
// 事件模块对象
var events = require('events');
// 事件处理对象
var eventEmitter = new events.EventEmitter();
// 连接函数
var connectHandler = function connected() {
console.log('连接成功');
eventEmitter.emit('dataReceived');
}
// 注册连接函数
eventEmitter.on('connection', connectHandler);
// 注册完成匿名函数
eventEmitter.on('dataReceived', function() {
console.log('数据接受成功');
});
// 触发连接
eventEmitter.emit('connection');
// 完成
console.log('程序执行完毕');
```
缓冲区 Buffer
* 用途 `处理二进制数据
* 创建
```
const buf = Buffer.alloc(10);
console.log(buf);
const buf = Buffer.from('wings', 'ascii');
console.log(buf.toString('hex'));
```
* 写入
```
const buf = Buffer.alloc(10);
const len = buf.write('www.baidu.com');
console.log('写入字节数' + len);
```
* 读取
```
for (let i = 0; i < 5; i++) {
console.log(buf[i]);
}
```
* 转JSON
```
const buf = Buffer.alloc(10);
const json = buf.toJSON();
console.log(json);
```
* 合并
```
const buf1 = Buffer.from('Hello');
const buf2 = Buffer.from('World');
const buf3 = Buffer.concat([buf1, buf2]);
console.log(buf3.toString());
```
* 比较
```
const buf1 = Buffer.from('Hello');
const buf2 = Buffer.from('2Hello3');
var result = buf1.compare(buf2);
if (result < 0) {
console.log('之前');
} else if (result == 0) {
console.log('相等');
} else {
console.log('之后');
}
```
* 拷贝
```
const buf1 = Buffer.from('Hello');
const buf2 = Buffer.from('1234567890');
buf1.copy(buf2, 2);
console.log(buf2.toString());
```
* 裁剪
```
const buf1 = Buffer.from('Hello');
const buf2 = buf1.slice(0, 3);
console.log(buf2.toString());
```
* 长度
```
const buf = Buffer.from('Hello');
console.log(buf.length);
```
流 Stream
* 流读取
```
var fs = require('fs');
var data = '';
// 创建流
var readStream = fs.createReadStream('input.txt');
// 设置编码
readStream.setEncoding('UTF8');
// 流事件 data end err
readStream.on('data', function(chunk) {
data += chunk;
});
readStream.on('end', function() {
console.log(data);
});
readStream.on('error', function(err) {
console.log(err);
});
console.log('程序执行完毕');
```
* 写入流
```
var fs = require('fs');
var data = '我就是我';
// 创建
var writeStream = fs.createWriteStream('output.txt');
// 写入
writeStream.write( data, 'UTF8');
writeStream.end();
// 写入流事件监听
writeStream.on('finish', function() {
console.log('写入完成');
});
writeStream.on('error', function(err) {
console.log(err.stack);
});
console.log('程序执行完毕');
```
* 管理流
```
var fs = require('fs');
var readStream = fs.createReadStream('input.txt');
var writeStream = fs.createWriteStream('output.txt');
readStream.pipe(writeStream);
console.log('程序执行完毕');
```
* 链式流
```
* 压缩
var fs = require('fs');
var zlib = require('zlib');
fs.createReadStream('input.txt').pipe(zlib.createGzip()).pipe(fs.createWriteStream('input.txt.gz'));
console.log('程序执行完成');
* 解压
var fs = require('fs');
var zlib = require('zlib');
fs.createReadStream('input.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('input2.txt'));
console.log('程序执行完毕');
```
模块
* 方法模块
* 定义
```
exports.world = function() {
console.log('Hello World');
}
```
* 引用
```
var hello = require('./hello.js');
hello.world();
```
* 对象模块
* 定义
```
function Hello() {
var name;
this.setName = function (newname) {
this.name = newname
};
this.sayHello = function() {
console.log('hello ' + this.name);
}
};
module.exports = Hello;
```
* 引用
```
var Hello = require('./hello.js');
var hello = new Hello();
hello.setName('Wings');
hello.sayHello();
```
* 原生模块
* 网络 `http`
* 路由 `url`
* 文件 `fs`
函数
* 匿名函数参数实例
```
function say(name) {
console.log('hello' + name);
}
// 接受匿名函数参数
function execure(someFunction, name) {
someFunction(name);
}
execure(say, 'Wings');
```
路由
* 服务器
```
var http = require('http');
var url = require('url');
function start(route) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
route(pathname);
response.writeHead(200, {'Content-Type':'text/plain'});
response.write('Hello World');
response.end();
}
http.createServer(onRequest).listen(8888);
console.log('Server has started.');
}
exports.start = start;
```
* 路由
```
function route(pathname) {
console.log(pathname);
}
exports.route = route;
```
* 启用
```
var server = require('./server');
var router = require('./router');
server.start(router.route);
```
全局变量
* 文件名
```
console.log(__filename);
```
* 目录
```
console.log(__dirname);
```
* 延时执行
```
function sayHello () {
console.log('hello');
}
var t = setTimeout(sayHello, 2000);
clearTimeout(t);
```
* 定时器
```
function sayHello () {
console.log('hello');
}
var t = setInterval(sayHello, 2000);
clearInterval(t);
```
* 控制台
```
console.log('Hello World');
```
* 进程
```
process.on('exit', function(code){
console.log('退出码' + code);
});
console.log('程序执行结束');
```
常用工具
* 文件系统(fs)
* 读取文件同步 `fs.readFileSync(path)
* 读取文件异步 `fs.readFile(path, callback) fs.read(fd, buffer, offset, length, position, callback)
* 打开文件 `fs.open(path, r+, callback)
* 获取文件信息 `fs.stat(path, callback)
* 写入文件 `fs.writeFile(file, data, callback)
* 关闭文件 `fs.close(fd, callback)
* 截取文件 `fs.ftruncate(fd, len, callback)
* 删除文件 `fs.unlink(path, callback)
* 创建目录 `fs.mkdir(path, callback)
* 读取目录 `fs.readir(path, callback)
* 删除目录 `fs.rmdir(path, callback)
* GET\POST请求
* Web模块
* Express模块
* RESTful
* 多线程
