assert 模块提供了一组断言函数,用于验证不变量。
一般服务器校验不使用断言,断言一旦不成立就退出程序了,而服务器要一直运行
assert(value[, message])
const assert=require('assert');
function sum(a, b){
assert(arguments.length==2, '必须传2个参数');
assert(typeof a=='number', '第一个参数必须是数字');
assert(typeof b=='number', '第二个参数必须是数字');
return a+b;
}
console.log(sum(12, 5));
Console
类,包含console.log()
、console.error()
和console.warn()
等方法,可用于写入任何 Node.js 流。- 全局的
console
实例,配置为写入process.stdout
和process.stderr
。 使用时无需调用require('console')
。
crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。
Md5加密是单项散列加密,理论上不能破解,简单的加密可以暴力破解,Md5双层加密,暴力破解基本也不可能
const crypto=require('crypto');
let obj=crypto.createHash('md5');
//obj.update('123456');
obj.update('123');
obj.update('4');
obj.update('56');
console.log(obj.digest('hex'));
//e10adc3949ba59abbe56e057f20f883e
const crypto=require('crypto');
function md5(str){
let obj=crypto.createHash('md5');
obj.update(str);
return obj.digest('hex');
}
console.log(md5(md5('123456')+'se32ssdfsd43'));
dns 模块用于启用名称解析。 例如,使用它来查找主机名的 IP 地址。
const dns=require('dns');
dns.resolve('baidu.com', (err, res)=>{
if(err){
console.log('解析失败');
}else{
console.log(res);
}
});
//[ '39.156.69.79', '220.181.38.148' ]
dns.lookup('baidu.com', (err, address, family) => {
console.log('地址: %j 地址族: IPv%s', address, family);
});
//地址: "39.156.69.79" 地址族: IPv4
//事件方式------------
const Event=require('events').EventEmitter;
let ev=new Event();
//1.监听(接收)
ev.on('msg', function (a, b, c){
console.log('收到了msg事件:', a, b, c);
});
//2.派发(发送)
ev.emit('msg', 12, 5, 88);
//收到了msg事件: 12 5 88
//函数方式-----------
function msg(a, b, c){
console.log('收到了msg事件:', a, b, c);
}
msg(12, 5, 88);
const fs=require('fs');
// 读文件
fs.readFile('1.txt', (err, data)=>{
if(err){
console.log('有错');
}else{
console.log(data.toString());
}
});
// 写文件
fs.writeFile('3.txt', 'erqwreqwere', err=>{
if(err){
console.log(err);
}else{
console.log('成功');
}
});
fs.readFile('ofo.png', (err, data)=>{
fs.writeFile('ofo2.png', data, ()=>{});
});
const http=require('http');
const fs=require('fs');
let server=http.createServer((req, res)=>{
fs.readFile(`www${req.url}`, (err, data)=>{
if(err){
res.writeHeader(404); //header
res.write('Not Found'); //body
}else{
res.write(data);
}
res.end();
});
});
server.listen(8080);
http2 核心 API 在客户端和服务器之间比 http API 更加对称。 例如,大多数事件,比如 'error'、 'connect' 和 'stream',都可以由客户端代码或服务器端代码触发。
- https - HTTPS
- inspector - 检查器
- module - 模块
- net - 网络
- os - 操作系统
- path - 路径
- perf_hooks - 性能钩子
- process - 进程
- punycode - 域名代码
- querystring - 查询字符串
- readline - 逐行读取
- repl - 交互式解释器
- stream - 流
const fs=require('fs');
let rs=fs.createReadStream('1.png');
let ws=fs.createWriteStream('2.png');
rs.pipe(ws);
rs.on('error', err=>{
console.log('读取失败');
});
ws.on('finish', ()=>{
console.log('写入完成');
});
const url=require('url');
let obj=url.parse('https://www.baidu.com:8080/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=aa&rsv_pq=f80d982000063ffb&rsv_t=6498LAZdRZjq9v4v0hs88kZItnCjDpT6UNBKr%2FF83%2F%2Bg4eiPURW2eQl9Iwc&rqlang=cn&rsv_enter=1&rsv_sug2=0&inputT=10&rsv_sug4=10', true);
console.log(obj);
输出:
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.baidu.com:8080',
port: '8080',
hostname: 'www.baidu.com',
hash: null,
search:
'?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=aa&rsv_pq=f80d982000063ffb&rsv_t=6498LAZdRZjq9v4v0hs88kZItnCjDpT6UNBKr%2FF83%2F%2Bg4eiPURW2eQl9Iwc&rqlang=cn&rsv_enter=1&rsv_sug2=0&inputT=10&rsv_sug4=10',
query:
[Object: null prototype] {
ie: 'utf-8',
f: '8',
rsv_bp: '0',
rsv_idx: '1',
tn: 'baidu',
wd: 'aa',
rsv_pq: 'f80d982000063ffb',
rsv_t:
'6498LAZdRZjq9v4v0hs88kZItnCjDpT6UNBKr/F83/+g4eiPURW2eQl9Iwc',
rqlang: 'cn',
rsv_enter: '1',
rsv_sug2: '0',
inputT: '10',
rsv_sug4: '10' },
pathname: '/s',
path:
'/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=aa&rsv_pq=f80d982000063ffb&rsv_t=6498LAZdRZjq9v4v0hs88kZItnCjDpT6UNBKr%2FF83%2F%2Bg4eiPURW2eQl9Iwc&rqlang=cn&rsv_enter=1&rsv_sug2=0&inputT=10&rsv_sug4=10',
href:
'https://www.baidu.com:8080/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=aa&rsv_pq=f80d982000063ffb&rsv_t=6498LAZdRZjq9v4v0hs88kZItnCjDpT6UNBKr%2FF83%2F%2Bg4eiPURW2eQl9Iwc&rqlang=cn&rsv_enter=1&rsv_sug2=0&inputT=10&rsv_sug4=10' }
const zlib=require('zlib');
const fs=require('fs');
let rs=fs.createReadStream('jquery.js');
let ws=fs.createWriteStream('jquery.js.gz');
let gz=zlib.createGzip();
rs.pipe(gz).pipe(ws);
ws.on('finish', ()=>{
console.log('完成');
});
server-stream-gz
const http=require('http');
const fs=require('fs');
const zlib=require('zlib');
let server=http.createServer((req, res)=>{
let rs=fs.createReadStream(`www${req.url}`);
//rs.pipe(res);
res.setHeader('content-encoding', 'gzip');
let gz=zlib.createGzip();
rs.pipe(gz).pipe(res);
rs.on('error', err=>{
res.writeHeader(404);
res.write('Not Found');
res.end();
});
});
server.listen(8080);
网友评论