学习计划:
目前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 : 判断一个变量是否是错误对象。