Node.js学习,看这篇就够了!

34 阅读3分钟

学习计划:

目前node.js需简单应用到一些web项目,目前的学习计划是:
1、先把node.js常见的一些模块学习下
2、找个框架学习下,例如egg.js
3、数据库相关的,mongodb+mysql
3、Github找个项目练练手

一、node.js模块相关

1. http:用于构建 HTTP 服务器和客户端。

http.Server和http.ClientRequest用于构建HTTP服务器和客户端服务器端:

服务器端:
1、http.Server创建服务器
2、通过server.listen去监听服务器的端口,处理request请求
3、通过构建路由来处理不同URL的request

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
  const parsedUrl = url.parse(req.url, true); //解析请求的url
  const path = parsedUrl.pathname;
  let data;

  switch (path) {
    case '/':
      data = { message: 'Hello, World!' };
      break;
    case '/about':
      data = { message: 'About' };
      break;
    default:
      data = { message: 'Not Found' };
      res.statusCode = 404;
  }

  res.setHeader('Content-Type', 'application/json');
  res.end(JSON.stringify(data));
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});


客户端:
1、http.request(),http.get()创建请求(指定url,methods)
2、处理服务端响应

const http = require('http');

const options = {
  hostname: 'www.example.com',
  port: 80,
  path: '/',
  method: 'GET'
};

const req = http.request(options, (res) => {
  console.log(`状态码: ${res.statusCode}`);
  console.log(`响应头: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`响应主体: ${chunk}`);
  });
  res.on('end', () => {
    console.log('响应已经结束。');
  });
});

req.on('error', (e) => {
  console.error(`请求遇到问题: ${e.message}`);
});

req.end();

2. fs:用于操作文件系统。

Node.js的fs模块提供了文件系统的功能,允许读取、写入和操作文件。
1、读取

const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

2、写入

const fs = require('fs');
const data = 'Hello, World!';

fs.writeFile('example.txt', data, 'utf8', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});


3、检查

const fs = require('fs');
const path = 'example.txt';

fs.exists(path, (exists) => {
  console.log(exists ? `${path} exists` : `${path} does not exist`);
});

4、删除

const fs = require('fs');

fs.unlink('example.txt', (err) => {
  if (err) throw err;
  console.log('example.txt was deleted');
});

3. path:用于处理文件路径。

Node.js 的 path 模块提供了用于处理文件路径的工具。可以解析和操作文件路径

const path = require('path');

console.log(path.basename('/path/to/file.txt'));
// output : file.txt 获取文件名:

console.log(path.extname('/path/to/file.txt')); 
// output : .txt 获取文件拓展名

console.log(path.dirname('/path/to/file.txt')); 
// output : /path/to 获取文件根目录

console.log(path.resolve('file.txt')); 
// output : C:\path\to\current\working\directory\file.txt 获取文件绝对目录

console.log(path.join('/path', 'to', 'file.txt')); 
// output : /path/to/file.txt

4. stream:用于处理流数据。

流数据(数据类型,可以用来读取或写入数据)

可以让你在读写文件时使用流的方式,而不是一次性读取整个文件

1、节省内存(按需读取或写入数据)
2、提高性能,数据实时处理(同时且支持按需读入+处理数据)

  • fs.createReadStream() 创建了一个可读流,然后使用 .on() 方法监听 'data' 和 'end' 事件。
const fs = require('fs');
const stream = fs.createReadStream('example.txt');
stream.on('data', (chunk) => {
    console.log(chunk.toString());
});
stream.on('end', () => {
    console.log('finished reading file');
});
  • fs.createWriteStream() 来创建一个写入流
const fs = require('fs');
const stream = fs.createWriteStream('example.txt');
stream.write('hello, world!');
stream.end();

  • 可以通过pipe()把多个流串联
const fs = require('fs'); 
const source = fs.createReadStream('source.txt'); 
const dest = fs.createWriteStream('dest.txt'); source.pipe(dest);

还有很多别的高级操作: 1.transform 流来转换数据
2.duplexer2 来将多个流合并成一个双工流
3.pump 来简化多个流之间的管道操作
...

5. util:提供一些常用的工具函数。

1.util.inherits : 对象继承另一个对象的原型对象,在不使用class的情况下可以实现继承的模式。
2.util.inspect : 将一个对象转换为字符串。它有很多可选的参数,可以调整输出的格式。
3.util.isArray : 判断一个变量是不是数组。
4.util.isRegExp : 判断一个变量是不是正则表达式。
5.util.isDate : 判断一个变量是否是日期。
6.util.isError : 判断一个变量是否是错误对象。

6. url: 对URL进行操作,解析获取其各部分

7. querystring :对 URL querystring 进行操作

8. events : 提供事件发布订阅机制

9. zlib: 用于压缩和解压数据

10. crypto: 为了加密和签名

11. os: 关于系统信息的模块

12. assert:提供断言功能

13. child_process: 在 Node.js 中创建子进程