ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Node.js入门基础笔记

2022-02-27 23:01:11  阅读:222  来源: 互联网

标签:Node 文件 exports fs 入门 写入 js npm 模块


一、Node.js

1)Node.js 是一个能够在服务器端运行 JavaScript 的开放的源代码、跨平台的JavaScript 运行环境

2)Node采用Google开发的V8引擎运行 JS 代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模

3)在 node 中有一个全局对象 global,它的作用和网页中的 window 类似

在全局中创建的变量都会作为 global 的属性保存

在全局中创建的函数都会作为 global 的方法保存

4)node 在执行模块中的代码时,会将代码包装在一个函数中执行

//该函数
function(exports,require,module,_filename,_dirname){
    //代码块位置
}
/*
exports
    该对象用来将变量或函数暴露到外部
require
    函数,用来引入外部模块
module
    代表当前模块本身,exports就是module的属性
_filename
    当前模块的完整路径
_dirname
    当前模块所在文件夹的完整路径
*/

二、模块化

模块化:

1)在 Node 中,一个 js 文件就是一个模块,

2)在Node 中,每一个 js 文件中的 js 代码都是独立运行在一个函数中

而不是在全局作用域,所以一个模块中的变量和函数在其他模块中无法访问

引入其他模块:

1)在 Node 中,通过require() 函数引入外部的模块

require() 可以传递一个文件的路径作为参数,此时node 将会自动根据该路径来引入外部模块(这里的路径如果使用相对路径必须以 . 或 .. 开头

2)使用 require() 引入模块后,该函数会返回一个对象,该对象代表的是引入的模块

3)我们使用 require() 引入外部模块时,使用的就是模块标识,通过模块标识可以找到指定的模块

模块分类:

1)核心模块:

由 node 引擎提供的模块

2)文件模块:

由用户自己创建的模块

文件模块的标识就是文件的路径(相对路径或绝对路径)

三、exports 和 moudel.exports

我们可以通过 exports 来向外部暴露变量和方法

只需要将暴露给外部的变量或方法设置为 exports 的属性即可

区别:

通过 exports 只能使用 . 的方式来向外暴露内部变量

exports.xxx = xxx

而module.exports 既可以通过 . 的形式,也可以通过对象直接赋值

module.exports.xxx = xxx

module.exports = {}

四、包 与 npm

CommonJS 的包规范由包结构包描述文件两个部分组成

包结构:用于组织包中的各种文件

package.json —描述文件(必须有)

bin —可执行二进制文件

lib —js 代码

doc —文档

test —单元测试

包描述文件:描述包的相关信息,以供外部读取分析

npm常用命令:

npm -v 查看npm的版本

npm version 查看所有模块的版本

npm search 包名 搜索包

npm install / i 包名 安装包

npm remove / r 包名 删除包

npm install 包名 --sava 安装包并添加到依赖中

npm install 下载当前项目所依赖的包

五、node搜索包流程

通过 npm 下载的包都放到node_modules文件夹中

我们通过 npm 下载的包,可以直接通过包名引入

node 在使用模块名字来引入模块时,它会首先在当前目录的 node_modules 中寻找是否含有该模块

如果有则直接使用,如果没有则会去上一级目录的 node_modules中寻找

如果有也直接使用,如果还是没有,则再去上一级目录寻找,直到找到磁盘的根目录为止,如果依然没有,则保存(类似于原型链的关系

六、Buffer(缓冲区)

1)Buffer的结构和数组很像,操作的方法也类似

2)但数组中不能存储二进制文件,而Buffer就是专门用来存储二进制数据

3)使用Buffer不需要引入模块,直接使用即可

4)在Buffer中存储的都是二进制数据,但是在显示时是以16进制显示的

var str = 'hello 张三';
//将一个字符串保存到buffer中
var buf = Buffer.from(str);
console.log(buf.length); // 占用内存的大小
console.log(str.length); // 字符串的长度

Buffer 的基本操作:

/*
Buffer.alloc(size) //创建一个指定大小的buffer
Buffer.allocUnsafe(size) //创建一个指定大小的buffer,但其中可能含有敏感数据(即分配空间,不会清楚原来空间里面的数据)
Buffer.from(str) //将一个字符串转化为buffer
注意:分配好指定大小的buffer后,后续无论怎么操作都不能改变其大小
*/
var buf = Buffer.alloc(10);
//通过索引来对buffer进行操作
buf[0] = 88;
buf[1] = 22;
buf[10] = 100; //不会报错,但也无效
console.log(buf[0]); // 56,只有数字在控制台或页面输出,则一定是十进制

七、文件系统

1)文件系统简单来说就是通过 node 来操作系统中的文件

2)使用文件系统,需要引入 fs 模块,直接引入无需下载

3)fs 模块中所有的操作都有两种形式可供选择(同步和异步

同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码

异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回

同步文件写入:

/*
1.打开文件
    fs.openSync(path,flags[,mode])
        path    要打开文件的路径
        flags   打开文件要做的操作类型
            r 只读的
            w 可写的
            a 可追加的
        mode    设置文件的操作权限,一般不用
    该方法会返回一个文件描述符作为结果,通过该结果来对文件进行操作
2.向文件中写入内容
    fs.writeSync(fd,string[,postion[,encoding]])
        fd  文件描述符,需要传递要写入文件描述符
        string  写入的内容
3.保存并关闭文件
    fs.closeSync(fd)
*/
var fs = require('fs');
var fd = fs.openSync(path,'w'); //返回一个文件描述符
fs.writeSync(fd,'要写入的内容');
fs.closeSync(fd);

异步文件写入:

/*
    fs.open(path,flags[,mode],callback) 回调函数必须有
    异步调用的方法,结果都是通过回调函数的参数返回的(可以通过arguments来查看参数)
    回调函数的两个参数:
        err 错误对象,如果没有错误为null
        fd  文件描述符
    错误优先:只要有可能出现异常的方法,第一个参数一定是err
*/
var fs = require('fs');
fs.open(path,'w',function(err,fd){
    //判断是否出错
    if(!err){
        //如果没有出错,则对文件进行写入操作
        fs.write(fd,'写入的内容',function(err){
            if(!err){
                console.log('写入成功~~');
            }
            //关闭文件
            fs.close(fd,function(err){
                if(!err){
                    console.log('文件已经关闭~~');
                }
            });
        });
    }else{
        console.log(err);
    }
});

简单文件写入:

var fs = require('fs');
fs.writeFile(path,'写入的内容',function(err){
    if(!err){
        console.log('写入成功~~')
    }
});

流式文件写入:(因为同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出)

/*
创建一个可写流
    fs.createWriteStream(path[,options])
        path    文件路径
        options 配置的参数
可以通过监听流的open和close事件来监听流的打开和关闭
    on(事件字符串,回调函数)
        可以为对象绑定一个事件
    once(事件字符串,回调函数)
        可以为对象绑定一个一次性的事件,该事件会在触发一次后自动消失
*/
var fs = require('fs');
var ws = fs.createWriteStream(path);
ws.once("open",function(){
    console.log("流打开了!!");
})
​
ws.once("close",function(){
    console.log("流打开了!!");
})
//通过ws.write()向文件中输出内容
ws.write('写入的内容');
ws.write('写入的内容');
ws.write('写入的内容');
ws.write('写入的内容');
​
ws.end() //关闭输出流这端
//ws.close() 关闭接受流这段

说明:文件系统中读入文件和其他相关方法可以参考 fs 文件系统 | Node.js API 文档 (nodejs.cn)

标签:Node,文件,exports,fs,入门,写入,js,npm,模块
来源: https://blog.csdn.net/A32626231165165/article/details/123172305

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有