Node.js部分模块

Node.js —— 模块

一、模块

1. 描述

module.exports = 对象 默认是一个空对象,用于导出该模块中的内容
require() 是一个全局函数,用于引入其他模块,返回模块导出的对象
__dirname 是模块中的局部变量,获取当前模块的绝对路径
__filename 是模块中的局部变量,获取当前模块的绝对路径和模块名称

2. 代码演示

  1. 被导入模块 eye.js
console.log('眼部模块被导入了');
var a = 2;
function fn() {
    return 4;
}
module.exports = {
    mya: a,
    myfn: fn
}
  1. head.js
var myEye = require('./eye.js');
console.log(myEye.mya); // 2
console.log(myEye.myfn()); // 4
console.log(__dirname); // C:\Users\web\Desktop\node.js测试
console.log(__filename); // C:\Users\web\Desktop\node.js测试\head.js

二、模块分类

以路径开头 不以路径开头
文件模块 require('./circle.js'),用于引入自定义模块 require('url'),用于引入官方核心模块
目录模块 require('./02_tao'),会到目录下寻找package.json文件中main属性对应的文件,如果找不到会自动寻找index.js require('tao'),用于引入第三方模块,首先会到当前目录下的node_modules目录中寻找tao,如果找不到,会一直往上一级目录下寻找

三、下载第三方模块

1. 概念

commonJS :是一种规范,制定了模块的引入和导出规范,Node.js下模块概念基于这种规范
包 (package) :指第三方模块,都是目录模块形式
npm :用于管理第三方模块的工具,包括下载安装、升级、卸载、上传...会在nodejs安装时附带安装

2. 基本命令

  • npm init -y —— 初始化一个项目说明文件
  • npm install 包的名称 —— 下载安装指定的包,会将包下载到当前目录下的node_modules中,如果node_modules不存在,会自动创建;会自动生成一个package-lock.json用于记录安装的包的名称和版本号(锁定包的版本号)。同时会在package.json中记录下载的这个包的名称和版本号。
  • npm install —— 自动安装package.json和package-lock.json中记录的包
  • npx -p node@版本号 node 文件名称 —— 先下载安装指定版本的Node.js,下载成功后,再使用这个版本的Node.js运行文件,运行成功后就删除这个版本的Node.js
  • npm config get registry —— 获取当前下载仓库的地址
  • npm config set registry http://registry.npm.taobao.org —— 设置下载的仓库地址为淘宝镜像(改为国内服务器)

三、官方核心模块

1. querystring

  1. 描述
    查询字符串是浏览器向服务器端传递数据的一种方式,位于URL(统一资源定位)中
  2. 解析查询字符串 —— parse
// 1. 引入查询字符串模块
const querystring = require('querystring');  // 源代码:lib/querystring.js
// 2. 查询字符串
let str = 'keyword=笔记本&price=4199&enc=utf-8';
// 3. 使用查询字符串模块解析为对象
let obj = querystring.parse(str);
console.log(obj); // [Object: null prototype] { keyword: '笔记本', price: '4199', enc: 'utf-8' }
console.log(obj.keyword, obj.price, obj.enc);

2. url

  1. 描述
    URL:统一资源定位符,互联网上任何内容都有一个对应的网址可以访问到,这个网址就叫URL
  2. 解析URL
//引入URL模块
const url=require('url');
const querystring=require('querystring');
let str='http://www.codeboy.com:9999/product_details.html?lid=18';
//使用URL模块解析URL
let obj=url.parse(str);
console.log(obj);
/*
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.codeboy.com:9999',
  port: '9999',
  hostname: 'www.codeboy.com',
  hash: null,
  search: '?lid=18',
  query: 'lid=18',
  pathname: '/product_details.html',
  path: '/product_details.html?lid=18',
  href: 'http://www.codeboy.com:9999/product_details.html?lid=18' }
*/

3. fs

const fs = require('fs');

  1. 创建目录
// 同步
fs.mkdirSync('./mydir');
// 异步
fs.mkdir('./mydir', function(err) {
    if (err) throw err;
    console.log('创建成功');
});
  1. 移除空目录
fs.rmdirSync('./mydir');
fs.rmdir('./mydir', function(err) {
    if (err) throw err;
    console.log('成功删除空目录');
});
  1. 查看文件状态
// 同步
var result = fs.statSync('./mydir');
// 异步
fs.stat('./mydir', function(err, res) {
    if (err) throw err;
    console.log(res);
    console.log(res.isFile()); // false
    console.log(res.isDirectory()); // true
})
  1. 读取目录
// 同步(只能读取当前这一层的文件名和目录名,思考:如何递归读取文件)
var res = fs.readdirSync('./');
// 异步
fs.readdir('./', function(err, res) {
    if (err) throw err;
    console.log(res); // [ 'file.js', 'mydir' ]
})
  1. 覆盖写入文件
/* 
如果文件不存在,会先创建文件然后写入数据;
如果文件已经存在,会先清空文件中的内容然后写入数据。
*/
// 同步
fs.writeFileSync('./mydir/1.txt', '123');
// 异步
fs.writeFile('./mydir/1.txt', '456', function(err) {
    if (err) throw err;
    console.log('覆盖修改成功');
})
  1. 追加写入文件
/* 
如果文件不存在,会先创建文件然后写入数据;
如果文件已经存在,会在文件末尾追加写入数据。
*/
// 同步
fs.appendFileSync('./mydir/1.txt', '789');
// 异步
fs.appendFile('./mydir/1.txt', '789', function(err) {
    if (err) throw err;
    console.log('追加修改成功');
})
  1. 读取文件内容
// 同步
var res = fs.readFileSync('./mydir/1.txt');
// 异步
fs.readFile('./mydir/1.txt', function(err, res) {
    if (err) throw err;
    console.log(res); // <Buffer 34 35 36 37 38 39 37 38 39>
})
  1. 删除文件
// 只能用于删除文件,思考:删除目录?
// 同步
fs.unlinkSync('./mydir/1.txt');
// 异步
fs.unlink('./mydir/1.txt', function(err) {
    if (err) throw err;
    console.log('成功删除文件');
})
  1. 检测文件(目录)是否存在
// 同步
var res1 = fs.existsSync('./mydir');
var res2 = fs.existsSync('./file.js');
console.log(res1, res2); // false true
// 异步
fs.exists('./mydir', function(res) {
    console.log(res);
})
  1. 拷贝文件
// 同步
if (fs.existsSync('./mydir')) fs.copyFileSync('./mydir/1.txt', './2.txt');
// 异步
fs.copyFile('./mydir/1.txt', './6.txt', function(err) {
    if (!fs.existsSync('./mydir/1.txt')) return;
    if (err) throw err;
})
  1. 流 stream
// 1. 创建可读取的文件流
let rs = fs.createReadStream('./mydir/1.txt');
// 事件:监听是否有数据流入
// on(事件名称, 回调函数) —— 添加事件
// data 固定,表示一旦有数据流入,自动通过回调函数获取
/*
let count = 0;  // 用于统计次数
rs.on('data', (chunk) => {
	// chunk表示分段的数据
	// console.log(chunk);
	count++;  // 读取一段,记录一次
});
// 添加读取结束:一旦读取结束,调用回调函数
rs.on('end', () => {
	console.log(count);
});
*/
// 2. 创建可写入的流
let ws = fs.createWriteStream('./2.zip');
// 3. 把读取的文件流通过管道添加到写入的文件流
// 最终完成文件拷贝
rs.pipe(ws);

4. http

用于创建WEB服务器

// 引入http模块
const http = require('http');
// 创建WEB服务器
const app = http.createServer();
// 设置端口
app.listen(8080);

// http://127.0.0.1:8080
// http://localhost:8080

// 接收请求并作出响应
// 事件:一旦请求服务器,自动调用回调函数
app.on('request', (req, res) => {
	// console.log('有一个人要买煎饼');

	// req 请求的对象
	// 获取请求的URL
	console.log(req.url, req.method);
	// 根据请求的内容作出判断


	// res 响应的对象
	// 设置响应的内容
	res.write('这是你的jianbing');
	// 结束并发送响应
	res.end();

	
	// 设置响应的状态码和要跳转的URL
	res.writeHead(302, {
		Location: 'http://www.tmooc.cn/'
	});
	// 结束并发送响应
	res.end();
	

	
	res.writeHead(404);  // 设置状态码为404
	res.write('Not Found');
	res.end();
	


});
posted @ 2021-06-21 19:05  carla-cn  阅读(71)  评论(0)    收藏  举报