NodeJs基础篇(一)

01.什么是Node.js

  1. node是js语言的服务器运行环境(类似于php中的apache服务器)
  2. 后端语言都有什么? -》 Java php node
  3. 前端的js运行环境是什么? -》 浏览器
  4. node.js是单线程,高并发场景用的多
  5. node 提供了大量的工具库,使js可以调用任意一个工具库中的API(接口)
  6. node 不是一门编程语言,是一个Javascript的编译环境,使用了事件驱动,非阻塞式的I/O的模型,使其轻量又高效。
  7. 前端js 是DOM驱动,平时写前端js的时候,才从dom为出发点考虑问题。
input 输入流  output输出流  非阻塞 异步/回调函数 

02.node 环境安装

  1. 官网安装稳定版本,不要安装最近版本
  2. 安装完成之后,在控制台查看是否安装成功,windows + R -> 输入cmd -> 回车 -> 弹出终端输入node -v,如果出现了版本号,就证明安装成功。

03.node 文件执行命令

1.终端

    node 文件名.后缀名

2.vsCode 让js文件快捷执行的插件: code runner

    [Done] exited with code=0 in 0.096 seconds
    Done -> 完成 (do did过去式 Done 完成式 代码已经执行完毕)
    exited -> 出口
    code=0 -> 代表项目执行完成,并且退出

    以上是输出的结果说明 ↑
  1. 装环境,nodemon

04.模块和包

node的==核心==之一

模块(module)和包(package)

1.模块(module)

模块就是一个文件,但是这个文件的格式可以是js,json,ts(TypeScript)

优点:
    代码方便管理,对代码进行了抽离
    方便复用

我们也可以自己写模块,写模块遵循 commonJS 规范
通过 require 导入模块
通过 exports 导出模块

属性导出:
1.
// 导出的属性,可以和赋值的属性不一样
/* 
exports.uName = userName;
exports.descprition = descprition;
exports.sex = sex;
exports.sayWord = sayWord;
*/
2.
// ----------------
let obj = {
   uNmae:userName,
   sex,//对象的key和value变量名一样可以省略
   descprition,
   sayWord
}
// commonJS 规范
module.exports = obj;



自己写的模块导入的时候,要写路径
系统自己的模块直接写名字就行
模块的查找顺序:先从自己找,再从父级找

top: new 关键字有什么用?

  1. 创建了一个空对象,并且this变量引用该对象,同时还继承了该函数的原型。
  2. 属性和方法被加入到this引用的对象中。
  3. 新创建的对象由this所引用,并且最后隐式的返回this。

2.包(package)

模块(module) 文件
那么 包(package)就是文件夹

本质上,就是一个文件目录,包是由多个模块组成的,也就是模块多了,就放到一个文件夹里面管理,就形成了包。

创建包,需要遵循commonJS规范
必须保证每个包里面,有一个package.json 文件,该文件 存储了与包有关的所有配置信息,比如包的入口,包里面有那些模块

1.创建package.json文件

两种方式:
 1.交互式创建
        在包下面执行 npm init 指令

 2. npm init -y  都是默认配置

创建一个新项目

1.创建 package.json文件
    命令:npm init -y
2.安装模块/依赖,也可以指定版本,npm install 模块名@版本号
    命令:npm install jquery@3
    
  卸载模块/依赖  npm uni(缩写) 包名
  其实在公司里面,直接删掉完事

创建的东西有:node_modules 这个文件夹里面是安装的所有模块/依赖

在package.json 文件中 dependencies字段,存储的是安装的模块信息
引用的时候,包的入口是在package.json 文件当中main配置的

05. fs 文件处理模块

nodejs提供了大量的工具库,其中文件处理的工具库,就是fs模块

// 首先需要先导入fs模块
const fs = require('fs');

nodejs模块级别的全局变量:__dirname 当前执行文件的绝对路径(两个下滑线)

1.fs.readFile() 读取文本文件

fs.readFile() //读取文件
    /*
        三个参数:
            1:path 路径,文件的路径
            2:options 配置信息 比如编码方式
            3:callback 回调函数,读取文件是不一定成功的。
                回调函数中有两个参数:一个返回错误信息,一个返回读取的文件信息
    */

使用方法:

fs.readFile("./book.txt","utf-8",function(err,data){
    if(err){
        console.log('读取失败',err);
    }else{
        console.log('读取成功',data);
    }
});

2.fs.writeFile() 写入文本文件

fs.writeFile() //写入文本文件
    /*
        四个参数:
            1:路径
            2:data 写入文件的内容
            3:配置信息 ,两个配置
                {
                    flag:'w',   //  默认为w,覆盖之前内容,a是追加内容
                    encoding:‘utf-8’// 编码方式
                }
            4:回调函数,写入成功和失败都会告诉你
                回调函数一个参数:如果错误会返回错误 err
    */

使用方法:

let str = "寒风孤影,江湖故人,相逢何必曾相识";
// 默认是覆盖文件原来的内容,
fs.writeFile("./book1.txt",str,{
    flag:'a', // a 追加内容   默认是w 覆盖操作
    encoding:'utf-8' //编码方式

},(err) => {
    if(err){
        console.log('写入失败',err);
    }else{
        console.log('写入成功');
    }
})

回调函数的执行问题?

回调函数什么时候执行完成? =》 不确定

谁去调用回调函数? =》 别人来调用

目前常见的回调函数场景:

1.定时器

  1. 请求 ajax/fetch

writeFile / readFile 都是异步的

3.大文件的读写 fs.createReadStream/fs.createWriteStream

1.I/O流,Stream大文件的读写一般采用流 Buffer

2.对大文件的操作 还是fs模块

let readF = fs.createReadStream('路径') // 创建读入流
let writF = fs.createWriteStream('路径') // 创建写入流
// 由于node是事件驱动,所以需要事件监听
// on() 事件监听方法 data 监听读取事件  end 监听读取完毕事件

let count1 = 0; //记录读取次数
// data 监听读取事件 每次只读取 64kb
readF.on('data',function(chunk){
    // chunk 
    count1 ++; // 每次只读取 64kb
    console.log('读取次数',count1);
    
    // chunk 里面是每次读取的字节
    // console.log('chunk',chunk);
    // write(写入的内容,回调函数) 将读取到的数据写入
    writF.write(chunk,(err) => {
        if(err){
            console.log('写入失败',err);
            return;
        }

        console.log('写入成功');
    });

});

// end 监听读取完毕事件
readF.on('end',() => {
    console.log('读取完毕');
})

4.目录的操作

目录也属于文件操作 ,也需要引入fs模块

fs来源于nodejs环境

fs.mkdir() // 创建目录 注意:文件加名不能和已经有的文件夹名重名
fs.exists() // 判断目录名或者文件名是否存在
fs.readdir() // 读取目录下的所有文件

使用方法

// 创建目录
// 名字不能和已经有的目录名重名
fs.mkdir('./imgs',(err,files) => {
    if(err){
        return console.log('创建目录失败',err);
    }

    console.log('创建成功:',files);
})

// 判断目录是否已经存在
fs.exists('./imgs',(bol) => {
    console.log('是否存在:',bol);
})

// 判断文件是否已经存在
fs.exists(__dirname+'/imgs/123.jpg',(bol) => {
    console.log('文件是否存在:',bol);
})


// 读取目录下的所有文件
fs.readdir(__dirname,(err,files) => {
    if(err){
        return console.log('读取目录失败:',err);
    }

    console.log('读取目录成功',files);
})

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容