nodejs内核包-http|fs|dns|url|buffer|querystring|net|dgram

69 阅读3分钟

学习视频 # node深入浅出教程

npm 常用命令

npm init [-y] // 初始化空项目

npm install [-D] [-g] [包名] // 装包

npm link // 软链接到全局

npm remove -g [包名] // 移除全局包

npm search [包名] // 到npmjs.org搜索包

npm view [包名] // 到npmjs.org查看包详情

npm publish . // 发布包到仓库

node 包

nodemon // 自动重启nodejs脚本
http
dns
querystring
url
fs
vue
vuex
vue-router
axios
react
react-dom
webpack
webpack-cli
html-webpack-plugin
mini-css-extract-plugin 
clean-webpack-plugin
terser-webpack-plugin
css-minimizer-webpack-plugin
webpack-bundle-analyzer
webpack-dev-server
webpack-merge
cross-enb
webpack-server-renderer
lodash
@babel/core
@babel/preset-end
@babel/plugin-transform-plugin
@babel/polyfill
@babel/loader
prettier
husky
lint-staged
@commitlint/cli 
@commitlint/config-conventional
stylelint 
stylelint-config-standard
eslint
eslint-config-prettier
style-loader
css-loader
postcss
postcss-loader
sass
sass-loader
recast
jscodeshift
eslint-plugin-local-rules

http

const http = require("http");
const server = http.createServer(function (request, response) {
  let data = "";
  request.on("data", function (chunk) {
    data += chunk;
  });
  request.on("end", function () {
    console.log("end", data, request);
  });
});

server.on("listening", function () {
  console.log("server is listening");
});

server.on("connection", function () {
  console.log("client is connected");
});

server.on("close", function () {
  console.log("server is close");
});

server.listen(3000, function () {
  console.log("server is start");
});

url

const url = require("url");
console.log(url.parse("http://www.baidu.com"));
console.log(
  url.format({
    protocol: "https",
    hostname: "example.com",
    pathname: "/some/path",
    query: {
      page: 1,
      format: "json",
    },
  })
);

querystring

const querystring = require("querystring");
console.log(
  querystring.stringify({
    foo: "bar",
    abc: ["xyz", "1234"],
  })
);
console.log(querystring.parse('/login?userame=admin&password=123456'));

dns

const dns = require("dns");
dns.resolve("www.baidu.com", (error, address) => {
  if (error) return console.error(error);
  console.log("address", address);
});
dns.reverse("114.114.114.114", (error, domain) => {
  if (error) return console.error(error);
  console.log("domain", domain);
});

fs

fs.readFile('xxx.js','utf8') // 读取文件
fs.writeFile('xxx.js','xxxxxxxxxxxx','utf8') // 创建写文件
fs.appendFile('xxx.js','dd','utf8') // 追加文件内容
fs.rename('xxx.js','bbb.js',error=>{}) // 改名
fs.open  // 打开文件
fs.unlink // 删除文件
fs.mkdir // 创建文件夹  recursive = true 多级目录可创建
fs.rm // 删除文件  
fs.unlink // 删除文件
fs.readdir // 读取目录下所有文件包括子目录  
fs.stat // 文件信息
fs.access // 判断文件是否存在
fs.realPath // 根据文件相对路径获得真实绝对路径

流读取

const readStream = fs.createReadStream("./package.json", { encoding: "utf8" });
readStream.on("open", (fd) => {
  console.log(fd);
});
readStream.on("ready", () => {
  console.log("ready");
});
readStream.on("data", (data) => {
  console.log(data);
});
readStream.on("end", () => {
  console.log("end");
});
readStream.on("close", () => {
  console.log("close");
});
readStream.on("error", () => {
  console.log("error");
});

写流文件

const writeStream = fs.createWriteStream("mytest.js", { encoding: "utf8" });
writeStream.write('xxxxx');

Buffer

const { Buffer } = require("buffer"); // buffer 里面是二进制,用整数数组表示

// 字节
const buffer = Buffer.alloc(128); // 128字节
const length = buffer.write("helloworld你好", "utf8");
console.log("buffer.length:" + length); // 16,utf8对应ascii码1个字节,中文3个字节

// 比较
const buffer1 = Buffer.from("hello");
const buffer2 = Buffer.from("world");
const compareResult = buffer1.compare(buffer2);
console.log("buffer compare:" + compareResult); // -1 因为字母h在w前,所以小于

// 赋值
const buffer3 = Buffer.alloc(3);
buffer3[0] = 65;
buffer3[1] = 66;
buffer3[2] = 67;
console.log(buffer3.toString("utf8")); // ABC  数字分别对应ascii码的ABC字母,默认utf8

// 字符串
const str = "abcd天";
const buffer4 = Buffer.from(str);
console.log(str.length, buffer4.length); // 5 7 字符串length是字符个数,buffer.length是返回字节数,buffer的中文是3个字节
console.log(buffer4); // <Buffer 61 62 63 64 e5 a4 a9>

// 多个buffer拼接
const buffer5 = Buffer.from("hello");
const buffer6 = Buffer.from("world");
const buffer7 = Buffer.from("你好");
const bufferArray = [buffer5, buffer6, buffer7];
const bufferLength = buffer5.length + buffer6.length + buffer7.length;
const bufferResult = Buffer.concat(bufferArray, bufferLength);
console.log(bufferResult.length); // 16
console.log(bufferResult.toString("utf8")); // helloworld你好

// string -> buffer -> json -> string
const { Buffer } = require("buffer");
const buffer8 = Buffer.from("你好世界");
const jsonString = JSON.stringify(buffer8);
console.log(jsonString); // {"type":"Buffer","data":[228,189,160,229,165,189,228,184,150,231,149,140]}
const jsonObject = JSON.parse(jsonString);
console.log(jsonObject);// {"type":"Buffer","data":[228,189,160,229,165,189,228,184,150,231,149,140]}
const buffer9 = Buffer.from(jsonObject);
console.log(buffer9.toString("utf8")); // 你好世界

// isBuffer
const buffer10 = Buffer.from("123");
console.log(Buffer.isBuffer(buffer10));// true

net

TCP \ socket 编程

创建 tcp server

// TCP \ socket
// 可以在linux中用 nc 127.0.0.1 8888 连接此服务端
const net = require("net");
const server = net.createServer((socket) => {
  console.log("client connected");
  server.maxConnections = 2; // 设置最大连接数,超过拒绝
  server.getConnections((error, count) => {
    if (error) return console.log(error);
    console.log("client count", +count); // 当前连接数
  });
  socket.setEncoding("utf8"); // 默认收到data是Buffer
  socket.on("data", (data) => {
    console.log(data); // 收到客户端消息
    console.log("从建立到现在一共读取的字节数", socket.bytesRead);
  });
  socket.write("发送给客户端", () => {
    console.log("从建立到现在一共发送的字节数", socket.bytesWritten);
  });
  console.log("local port", socket.localPort);
  console.log("local address", socket.localAddress);
  console.log("remote port", socket.remotePort);
  console.log("remote address", socket.remoteAddress);
  console.log("remote family", socket.remoteFamily);
});

server.listen(8888, () => {
  console.log("server is listening");
  const address = server.address();
  // 当前服务信息
  console.log(address.port + "," + address.address + "," + address.family);
});

创建 tcp client

// TCP \ socket
const net = require("net");
const client = new net.Socket();
client.connect(8888, "127.0.0.1", () => {
  console.log("connected to server");
});
client.setEncoding("utf-8");
client.on("data", (data) => {
  console.log(data);
  client.write("发送给服务器");
});
client.on("end", () => {
  console.log("client end");
});

# udp/datagram

创建udp server

// udp server
const dgram = require("dgram");
const message = Buffer.from("来自服务端消息");
const socket = dgram.createSocket("udp4", (msg, info) => {
  // 发送给info客户端
  socket.send(
    message, // 消息内容
    0, // 内容偏移
    message.length, // 内容长度
    info.port, // 客户端端口
    info.address, // 客户端地址
    (error, bytes) => {
      if (error) return console.log(error);
      console.log("server has send " + bytes + "bytes message");
    }
  );
});

socket.bind(999, "localhost", () => {
  console.log("server has bind to 999");
});
socket.on("message", (msg, info) => {
  console.log("message event occured");
  console.log(msg.toString("utf8"));
});

创建udp server

// udp client
const dgram = require("dgram");
const message = Buffer.from("this message from client");
const socket = dgram.createSocket("udp4");
socket.send(message, 0, message.length, 999, "localhost", (error, bytes) => {
  if (error) return console.log(error);
  console.log("clinet has send" + bytes.length + "bytes message");
});
socket.on("message", (msg, info) => {
  console.log("client receive message" + msg.toString());
});