NodeJS模块化

tech2023-12-25  75

什么是NodeJS

1.Node.js官网地址:https://nodejs.org/en/中文:http://nodejs.cn/api/1.Node 是一个构建于 Chrome V8引擎(编译器)之上的一个Javascript 运行环境 Node是一个运行环境,作用是让js拥有开发服务端的功能 2.Node使用事件驱动、非阻塞IO模型(异步读写)使得它非常的轻量级和高效 Node中绝大多数API都是异步(类似于ajax),目的是提高性能 3.Node中的NPM是世界上最大的开源库生态系统(类似于github) NMP官网:https://www.npmjs.com 4.Node运行环境的另一种叫法,作用是解析执行js代码(Node.exe工作环境称之为REPL环境)5 .nodemon node开发之友,当你的js文件发生变化的时候,nodemon会自动帮你启动node程序 安装: npm install -g nodemon 使用:nodemon [js文件名]

NodeJS模块化

模块:其实就是前端的第三方库(别人写的js文件)

内置模块/核心模块:nodejs作者自己写的模块

第三方模块:热心网友写的模块

核心模块

nodejs模块的使用方法:

1.导包(下载):得到一个对象,存储框架中的API require('模块路径'); 2.用包:调用对象的方法

fs文件读取模块

readFile读取文件 1.导入模块 (1)参数: 模块路径 (2)返回值: 对象 , 存储模块所有的api const fs = require('fs'); 使用模块 /** * @description: * @param {string} path:文件路径 * @param {string} option:可选参数 文件编码默认二进制 utf-8:中文 * @param {function} callback:读取回调 (err,data)=>{err:错误信息 data:读取数据} * @return: */ fs.readFile('./a.txt','utf-8',function(err,data){ if(err){ // 抛出异常:程序终止运行,并且会告诉你报错的原因和具体的行数 throw err; // console.log(err); // console.log('读取失败'); // 成功,err就是null,data就是文件数据 }else{ console.log('读取成功'); console.log(data); } });

writeFile写入文件 // 1.导入模块 const fs = require('fs'); //2. 使用模块 /** * @description:写入文件 * @param {string} path :文件路径 * @param {string} data :要写入的数据 * @param {string} option :文件编码 自动根据数据识别,一般不用传 * @param {function} callback : 写入回调(err)=>{err:错误信息} * @return: */ fs.writeFile('./b.txt','helloworld',err=>{ if(err){ throw err; }else{ console.log('写入成功'); } }) 同步与异步的区别 编译器执行代码流程 从上往下解析代码判断代码是同步还是异步 同步:立即执行 异步:不执行,放入一个事件队列池(EventLoop) 同步与异步的区别 API不同,异步有回调函数,同步一般没有(前端有两个API是异步,定时器和ajax)执行顺序不同,同步有序且优先执行,异步是无序执行性能不同,异步性能高(不能阻塞线程),同步阻塞线程 /* 1.编译器执行代码流程 1.1 从上往下解析代码 1.2 判断代码是同步还是异步 同步:立即执行 异步:不执行,放入一个事件队列池(EventLoop) 1.3 当页面所有同步执行完毕之后,才会执行事件队列池中的代码 2.同步与异步区别 2.1 API不同,异步有回调函数,同步一般没有 * 前端有两个API是异步,定时器和ajax 2.2 执行顺序不同,同步有序且优先执行,异步是无序执行 2.3 性能不同,异步性能高(不能阻塞线程),同步阻塞线程 */ // 导入模块 const fs = require('fs'); /* 异步api的特点: 1.有回调函数 2.无序执行 3.不阻塞线程:性能高 */ fs.readFile('./a.txt', 'utf-8', (err,data)=> { console.log(11111); }); fs.readFile('./a.txt', 'utf-8', (err,data)=> { console.log(22222); }); fs.readFile('./a.txt', 'utf-8', (err,data)=> { console.log(33333); }); fs.readFile('./a.txt', 'utf-8', (err,data)=> { console.log(44444); }); /* // nodejs中所有的api都是异步的,如果希望同步就会在后面加上sync即可 同步的特点: 1.没有回调 2.有序 3.阻塞线程:性能低 */ let data1 = fs.readFileSync('./b.txt','utf-8'); console.log('55555'); let data2 = fs.readFileSync('./b.txt','utf-8'); console.log('666666'); let data3 = fs.readFileSync('./b.txt','utf-8'); console.log('777777'); let data4 = fs.readFileSync('./b.txt','utf-8'); console.log('8888888');

path路径模块

NodeJS中的相对路径与绝对路径 前端相对路径 ./ :相当于当前文件所在的文件夹nodejs相对路径 ./:相对于执行node命令所在的文件夹在node中,每个js文件都有两个全局变量 __dirname:当前js文件所在的文件夹绝对路径__filename:当前文件本身的绝对路径 path路径模块作用 作用和自己拼接差不多,但是容错率更高 自动识别当前操作系统的磁盘分隔符,会自动添加纠错功能:如果磁盘分隔符写错了,path模块会自动纠正 // 导入path模块 const path = require('path'); let aPath = `${__dirname}/a.txt`; console.log(aPath); let bPath = path.join(__dirname, '\\/data', '///\\a.txt'); console.log(bPath); // 1.导入模块 // (1)参数: 模块路径 (2)返回值:对象,储存模块所有的api const fs = require('fs'); // (2)使用模块 fs.readFile(aPath, 'utf-8', (err, data)=> { if (err) throw err; console.log(data);//测试 });

http服务器模块

http模块搭建服务器 导入模块创建服务器打开服务器 // 1.导入模块(相当于安装phpstudy软件) const http = require('http') // 2.创建服务器(相当于运行phpstudy打开一个窗口) let server = http.createServer((req,res)=>{ // 监听客户请求的回调函数:每收到一次客户请求,就会调用一次(类似于事件触发) // req:请求对象,负责获取客户端的请求信息 res:响应对象。负责响应客户端的数据的 console.log(req.url); // 了解即可:url中文会被进行urlencode转码 console.log(decodeURI(req.url)); }); // 3.打开服务器(相当于点击phpstudy的开启按钮) /** * @description: * @param {type} post:端口号 :系统给每一个应用程序一个编号,称之为端口号 * 默认就是本机ip * @param {type} hostname :主机名(ip地址) 每一台计算机网络唯一身份标识符(人的身份证号) * @param {type} callback: 开启服务器 * @return: */ server.listen(3000,()=>{ console.log('服务器开启成功'); }); http模块响应请求 注意: end()参数只能是两种类型 字符串 和二进制如果想要响应对象,需要转成json格式字符串 // 1.导入模块 const http = require('http'); // 2.创建服务器 let server = http.createServer((req, res) => { // req:请求对象 console.log(req.url); // res:响应对象 // 注意点 end()参数只能是两种类型 字符串 | 二进制 // 如果想要响应对象,需要转成json格式字符串 JS->JSON.stringify() res.writeHead(200, { 'Content-Type': 'text/html;charset=utf8', }); //text/html文本}); res.end(JSON.stringify({ name: '二傻子', age: 20 })); }); // 3.开启服务器 server.listen(3000, () => { console.log('服务器开启成功'); }); http模块根据不同的请求响应不同的数据http模块响应html文件 需求: (1)请求路径为首页 : / . 响应:index.html (2)请求路径为: /login 响应: login.html (3)请求路径为: /list 响应: list.html (4)其他路径 : 响应: 404.html // 1.导入模块 const http = require('http'); const fs = require('fs'); const path = require('path'); // 2.创建服务器 let server = http.createServer((req, res) => { // (1)请求:req console.log(req.url); // (2)处理:根据不同的请求响应不同的数据 if (req.url == '/') { // 响应:index.html // fs模块读取文件 fs.readFile( path.join(__dirname, 'www', 'index.html', (err, data) => { if (err) throw err; // (3)响应 res.end(data); }) ); } else if (req.url == '/login') { //响应login // fs模块读取文件 fs.readFile( path.join(__dirname, 'www', 'login.html', (err, data) => { if (err) throw err; // (3)响应 res.end(data); }) ); } else if (req.url == '/list') { // 响应 :list.html fs.readFile( path.join(__dirname, 'www', (err, data) => { if (err) throw err; // 响应 res.end(data); }) ); } else { fs.readFile( path.join(__dirname, 'www', '/404.html', (err, data) => { if (err) throw err; res.end(data); }) ); } // 3.开启服务器 server.listen(3000,()=>{ console.log('服务器成功开启'); }) });
最新回复(0)