Node.js 开发手册
约 1158 字大约 4 分钟
nodejs
2020-05-06
Node.js 常用命令、核心模块语法参考手册。
安装
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模块
全局环境配置
- Windows
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-loader:
npm install style-loader css-loader --save-dev - 清空缓存:
npm cache clean --force - 校验缓存:
npm cache verify
核心语法
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('程序执行结束');事件
Node.js 采用事件循环机制,基于观察者模式:事件相当于主题,事件处理函数相当于观察者。
EventEmitter 对象
// 事件模块对象
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
Buffer 用于处理二进制数据。
创建
const buf = Buffer.alloc(10);
console.log(buf);
const buf2 = Buffer.from('wings', 'ascii');
console.log(buf2.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.readdir(path, callback) - 删除目录:
fs.rmdir(path, callback)
其他模块
- GET/POST 请求
- Web 模块
- Express 模块
- RESTful
- 多线程
