首页 > 编程语言 >node.js

node.js

时间:2023-02-24 09:56:20浏览次数:35  
标签:node 文件 fs err -- 写入 js 模块

cmd

  • 环境变量(windows系统中的变量)
  • path环境变量
    path坏境变量中保存的是一个一个的路径,路径之间使用;隔开-作用:
  • 当我们在命令行窗口中调用一个命令,或访问一个文件时,系统会先在当前文件夹中寻找,如果找不到则依次去path的路径下寻找,如果找到则直接使用,如果没有找到则继续向下一个路径去寻找,如果所有的路径中都没有找到,则报错
  • 可以将一些常用的文件或程序的路径添加到path下,这样我们就可以在任意位置来访问这些文件了

进程和线程

  • 进程
    -- 进程负责为程序的运行提供必备的环境-进程就相当于工厂中的车间
    线程
  • 线程计算机中的最小的计算单位,线程负责执行进程中的程序,线程就相当于工厂中的工人
  • 单线程
  • 多线程

Node.js简介

  • Node.js是一个能够在服冬瞾端运行JavaScript的开放源代码、跨平否JavaScript运行环境。
  • Node采用Google开发的V8引擎运行js代码,使用事件驱动非阻塞和异步I/o模型等技术来提高性能,可优化应用程序的传输量和规模。
  • Node大部分基本模块都用JavaScript编写。在Node出现之前,
  • 通常作为客户端程序设计语言使用,以S写出的程序常在用户的浏览器上运行。
  • 目前,Node已被IBM、、Microsoft、Yahoo!、Walmart、Groupon.SAP、LinkedIn、Rakuten、PayPal、Voxer和GoDaddy等企业采用
  • Node的服务器单线程的
  • Node处理请求时是单线程,但是在后台拥有一个
    IO线程池

模块化

  • 在node中有一个全局对象globalThis,它的作用和网页中window类似
  • 在全局中创建的变量都会作为global的属性保存
  • 在全局中创建的函数都会作为global的方法保存
  • 当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码
function (exports, require, module, _filename, _dirname) {
}
实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参:
- exports
-- 该对象用来将变量或函数暴露到外部
- require
-- 函数,用来引入外部的模块
- module
-- module代表的是当前模块本身,exports就是module的属性
- 既可以使用exports导出,也可以使用module.exports导出
- filename
-- 当前模块的完整路径
- dirname
-- 当前模块的目录文件夹

## exports和module.export
- 通过exports只能使用.的方式来向外暴露内部变量
`exports.XXX=XXX`
- 而`module.exports`既可以通过.的形式,也可以直接赋值
`module.exports.XXX=XXXX`
`module.exports ={}`

## 包基础
- CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。CommonJS的包规范由**包结构**和**包描述文件**两个部分组成。
- 包结构 
-- 用于组织包中的各种文件
- 包描述文件
-- 描述包的相关信息,以供外部读取分析

### 包结构
-- 包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:
- package.json 描述文件(必须存在的文件)
- bin 可执行二进制文件
- lib js代码
- doc 文档
- test 单元测试

## NPM(Node Package Manager)
- CommonJS包规范是理论,NPM是其中一种实践。
对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。

## 模块的标识
-- 模块的标识就是模块的名字或路径
- 我们node通过模块的标识来寻找模块的
- 对于核心模块〈npm中下载的模块),直接使用模块的名字对其进行引入
- `var fs =require ( "fs");`
- `var express =require ("express");`
- 对于自定义的文件模块,需要通过文件的路径来对模块进行引入,路径可以是绝对路径,如果是相对路径必须以./或../开头:`var router = require("./router" );`

## npm的命令
- npn -v查看npm的版本
- npmn version查看所有模块的版本 npm search包名搜索包
- npm install / i 包名 安装包
- npm remove / r 包名 删除包
- npm install 包名--save 安装包并添加到依赖中
- npm install 下载当前项目所依赖的包
- npm install 包名 -g 全局安装包(全局安装包一般是一些工具)

## node搜索包的流程
- 通过npm下载的包都放到node_modules文件夹中
我们通过npm下载的包,直接通过包名引入即可
- node在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有该模块
如果有则直接使用,如果没有则去上一级目录的node_modules中寻找,如果有则直接使用,如果没有则再去上一级目录寻找,直到找到为止直到找到磁盘的根目录,如果依然没有,则报错

## Buffer (缓冲区)
- Buffer的结构和数组很像,操作的方法也和数组类似
- 数组中不能存储二进制的文件,而buffer就是专门用来存储二进制数据-使用buffer不需要引入模块,直接使用即可
- 在buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示,buffer中每一个元素的范围是从00 - ff
- 00000000 - 11111111
- 计算机一个0或一个1我们称为1位(bit)
- 8bit = 1byte(字节)
- buffer中的一个元素,占用内存的一个字节
- `Buffer.from (str)`将一个字符串转换为buffer
- `Buffer.alloc (size)`创建一个指定大小的Buffer
- `Buffer.alloUnsafe(size)`创建一个指定大小的Buffer,但是可能包含敏感数揖
- `Buffer.tostring()`(将缓冲区中的数据转换为字符串

## fs文件系统
- 文件系统(File system)
- 文件系统简单来说就是通过Node来操作系统中的文件
- 使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载
- 同步和异步调用
- fs模块中所有的操作都有两种形式可供选择同步和异步。
- 同步文件系统会阻塞程序的执行,也就是除非操作完毕,则不会向下执行代码,函数名带有sync
- 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回,函数名不带sync

### 同步文件写入
- 手动操作的步骤
1. 打开文件
fs.opensync(path, flag[,mode])
- path要打开文件的路径
- flags 打开文件要做的操作的类型
-- r只读的
-- w可写的
- mode设置文件的操作权限,一般不传返回值:
- 该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作
2. 向文件中写入内容
fs.writesync(fd, stringl , position [ ,encoding] ] )
- fd文件的描述符,需要传递要写入的文件的描述符
- string要写入的内容
- position写入的起始位置
- encoding 写入的编码,默认utf-8
3. 保存并关闭文件
fs.closesync (fd)
- fd要关闭的文件的描述符
【example】

let fs = require('fs');
let res = fs.openSync('./JS/1.txt','w');
console.log(res);
fs.writeSync(res, '小肥');
fs.closeSync(res);

### 异步文件的写入

// fs文件系统 异步写入
let fs = require('fs');
fs.open("1.txt",'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.warn(err);
}
});
} else {
console.warn(err);
}
});
} else {
console.warn(err);
}
});


### 简单文件写入
fs.writeFile(file, data [ , options] , callback )fs.writeFilesync(file, data [ , options ] )
- file要操作的文件的路径
- data要写入的数据
- options 选项,可以对写入进行一些设置
- callback当写入完成以后执行的函数

let fs = require('fs');
fs.writeFile("./JS/1.txt", "11",{flag:'a'},(err)=>{
if (err) {
console.warn(err);
} else {
console.log("ok");
}
})


### 流文件写入
- 同步、异步、简单的写入都不适合大文件的写入,性能较差,容易导致内存溢出

// 流式文件写入
// 导入fs
var fs = require('fs');
// 创建一个可写流
var ws = fs.createWriteStream('1.txt');
// 可以通过监听流的open和close事件来监听流的打开和关闭
ws.once("open", function(){
console.log("123");
})
// 通过ws向文件中输出内容
ws.write('111通过可写流写入的');
ws.write('22通过可写流写入的');
ws.write('33通过可写流写入的');
ws.write('44通过可写流写入的');
ws.write('55通过可写流写入的');
ws.end();


### 简单文件读取
1.同步文件读取2.异步文件读取3.简单文件读取
fs.readFile(path [ , options] , callback)fs .readFilesync(path [ , options] )
- path要读取的文件的路径
- options读取的选项
- callback回调函数,通过回调函数将读取到内容返回(err,data)
-- err错误数据
-- data读取到的数据,会返回一个Buffer

let fs = require('fs');
fs.readFile('1.txt',(err, data)=>{
if (err) {
console.warn(err);
} else {
console.log(data.toString());
fs.writeFile('10.txt',data, (err)=>{
if (err) {
console.warn(err);
} else {
console.log('ok');
}
})
}
});

4. 流式文件读取
- 流式文件读取也适用于一些比较大的文件,可以分多次文件读取到内存

// 流文件读取
var fs = require('fs');
// 创建一个可读流
var rs = fs.createReadStream("package.json");
var ws = fs.createWriteStream("1.txt");
rs.once("close", function(){
rs.close();
})
rs.on("data", function(data){
console.log(data);
ws.write(data);
ws.end();
});
// rs.pipe(ws);

标签:node,文件,fs,err,--,写入,js,模块
From: https://www.cnblogs.com/feiru-cnblogs/p/17146795.html

相关文章

  • JS词法环境和执行上下文
    前言JavaScript是一门解释性动态语言,但同时它也是一门充满神秘感的语言。如果要成为一名优秀的JS开发者,那么对JavaScript程序的内部执行原理要有所了解。本文以最新的ECM......
  • 第十节:node实操(基础结构搭建、注册、登录、jwt校验、路由自动化等)
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblog......
  • 使用JsonTextReader提高Json.NET反序列化的性能
    一、碰到的问题在服务器的文件系统上有一个业务生成的BigTable.json文件,其可能包含的JSON字符串很大,同时里边的集合会包含很多的记录;我们使用以下的代码来反序列化,虽然使......
  • mysql 的 json 类型
    创建表DROPTABLEIFEXISTS`student`;CREATETABLE`student`(`id`int(0)NOTNULLAUTO_INCREMENTCOMMENT'表的id',`name`varchar(255)CHARACTERSETut......
  • 18、实体类对象比对-JSON
    实体类对象相互比较-JSON方式:在实际开发中,我们经常需要比较同一个自定义类型的两个不同对象的属性值是否相等,采用JSON方式比较可快速有效实现相关需求。JSONobject是FastJ......
  • JS范围内生成多个不相同随机整数
    /*范围内生成随机整数*///min:最小值  max:最大值    functionrandomNum(min,max){      letnum=Math.floor(((Math.random()*(m......
  • threejs shader特效,分区辉光
    分区辉光有两种实现方式:1.单个图层两次渲染,先用带bloom的composer渲染一次,再正常渲染一次:https://github.com/mrdoob/three.js/blob/master/examples/webgl_postprocessin......
  • js的继承的实现与代码编写
    js的继承的实现与代码编写一、继承  对象的一个类可以从现有的类中派生,并且拥有现有的类的方法或是属性,这和过程叫做继承。被继承的类叫做父类或是基类,继承的类叫做子类......
  • dva.js 知识导图
    (JavaScript语言&)JavaScript语言&不要用 var,而是用 const 和 let,分别表示常量和变量。不同于 var 的函数作用域,const 和 let 都是块级作用域。模板字符串......
  • node-sass安装失败解决方法
    项目npminstall报错:没有安装python或node-sass安装失败的问题!!!既然看到node-sass安装失败,我就又重新单独安装了node-sass,但还是失败。猜测是网络原因,但是换了全局的淘......