Node.js学习

nodejs

命令提示符

# 常用的指令
dir #列出当前目录下的所有文件
cd 目录名 #进入某文件夹
md #新建一个文件夹
rd #删除一个文件夹
. #表示当前目录
.. #表示上一级目录
cd .. #返回上一级目录

如果我们需要经常访问的程序或文件,将这些文件的路径添加到path中,这样我们就可以在任意位置访问了

环境变量
在这里插入图片描述
当我们在命令行窗口打开一个文件,或者调用一个程序是,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开;如果没有找到则会一次到环境变量path路径中寻找,直到找到为止;如果全部没有找到直接报错;
在这里插入图片描述

进程和线程

  1. 进程
    进程负责为了程序的运行提供必备的环境
    进程就相当于工厂中的车间
  2. 线程
    线程计算机中的最小的计算单位,线程负责执行进程中的程序
    线程就相当于工厂的工人
    a.单线程:JS是单线程
    b.多线程

Node简介

  1. Node.js是一个能够在服务器端运行JavaScript的开发源代码、跨平台JavaScript运行环境
  2. Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可以优化应用程序的传输量和规模。
  3. Node大部分基本模块都用了JavaScript编写。在Node之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常常在浏览器上运行。
  4. Node.js是起初(瑞安·达尔)用来web服务器的高性能并发问题
  5. 奇数版本5.0\7.0一般是测试版本,偶数版本8.0/10.0是稳定版本
  6. Node是服务器单线程

Node执行js文件

进入要执行的目录->打开命令行

# 执行js文件
node index.js

在webstorm或Idea中直接运行node

配置
在这里插入图片描述
在编写时有提示开启,Node Assistance
在这里插入图片描述

Node模块化

  1. ECMAScript标准的缺陷
    · 没有模块化系统
    · 标准库少(jQuery)
    · 没有标准接口
    · 缺乏管理系统(无法直接安装插件,得自己找)

  2. 理解
    比如你需要建多个文件夹来实现多个功能(多哥js),这样可以在需要

    引入的文件里面

var md = require("./xx") //相对路径,./xx是文件标识,require()引入的模块以后,该函数会返回一个对象
在被引入模块中,需要暴露
exports.x="abc"
exports.y = function(){}

变量引入、方法引入
模块

  1. 核心模块
    node自己提供的
    标识直接是名字
  2. 文件模块
    用于自己创建的模块

js里面的全局变量定义

在node中有一个全局对象global,它的作用和网页中windows类似 ,在全局中创建的变量都会作为global的属性报讯;在全局中创建的函数都会作为global的方法保存

var a = 123; //局部变量
a = 10 ;//全局变量
console.log(global.a)//输出10

注意:node在执行模块中代码时,它会将模块包装成一个函数执行
包装结构如下:查询这个方法arguments.callee +""

function (exports ,require ,module, _filename, _dirname){
	//自己编写的代码
	
}
exports 
# 该对象将变量或函数暴露在外面
require
#函数,用来引入外部的模块
module
# module代表的是当前模块的本身
#exports 就是module的属性
# 既可以使用exports导出,也可以使用module.exports导出
_filename
# 执行当前模块js文件的路径 C:\Users\age\age.js
_dirname
# 当前模块所在文件夹的路径 C:\Users\age

_exports和module.exports

  1. 引用的效果一样
  2. 区别
module.exports={
	a:24
}//正确
exports={
	a:28	
} //报错

在这里插入图片描述
所以,exports只能使用.的方式来向外暴露内部变量,exports.xxx = xxx;而module.exports既可以通过.的形式,也可以直接赋值module.exports.xxx = xxmodule.exports = {}

包package

Commonjs的包的规范主要包括包的描述文件包的结构
包实际上就是一个压缩文件,压缩以后还原为目录。符合规范的目录,应该包含如下文件:

  • package.json - 描述文件
  • bin -可执行二进制文件
  • lib - js代码
  • doc -文档
  • test -单元测试工具

package.json 不能写注释
在这里插入图片描述

NPM(Node Package Manager)

如果存在A->B->C, 下载B之后,会自动检测有没有C

  1. 检测NPM的版本
npm -v # 查看npm版本时
npm version #查看所有模块的版本

在这里插入图片描述
2. 创建一个package.json文件

npm init # 之后填写下列东西

在这里插入图片描述
成功之后有一个package.json文件
3. 安装依赖包

npm search math #搜素对应的math字段的包
npm install math #安装math包

安装成功之后有一个node_modules文件夹,里面有对应的依赖包

npm install 报名 --save # 保存在dependencies ,上传的时候不上传node_modules
npm install 包名 -g #全局安装包(全局安装包一般都是一些工具)

npm remove 包名 # 删除包
npm r 包名

cnpm

npm是国外的服务器,依赖包很大时不稳定,cnpm是镜像服务器,把所有的依赖包都下载到镜像

  1. 连接淘宝镜像服务器(每10分钟与npm服务器同步)
npm install -g cnpm --registry=https://registry.npm.taobao.org #回车安装

检查是否安装成功

cnpm i math --save #安装完成之后与目录npm有点不一样

在这里插入图片描述

npm包搜索自动流程

通过npm下载的包都放在node_modules文件夹里面,我们通过npm下载的包,直接通过包名引入即可

流程:
node在使用模块名字来引入模块是,它首先在当前目录的node_modules中寻找含有该模块;如果有则直接使用;如果没有去上一级目录的node_modules中寻找;如果有则直接使用,如果没有再去上一级目录寻找,直到找到为止;直到找到磁盘的根目录,如果没有则报错。

Buffer缓存区

Buffer的结构与数组很像,操作的方法也和数组类似;数组不能存储二进制的文件,而Buffer是专门用来存储二进制数据;使用buffer不需要引入模块,直接使用即可;在buffer中存储的都是二进制,但是它是以十六进制的方式呈现的,buffer中每一个元素的范围都是从00~ff

var str ="hello buffer"
var buf = Buffer.from(str)
console.lof(buf)
buf.length//占有内存大小
str.length//字符串的长度
所有如果字符串里面有中文,两个数据不一样;1个汉字 占3个字节

把计算机想成一个个小格 ,0 1
8bit = 1byte(字节)
1024byte = 1kb
1024kb = 1mb
1024mb = 1gb
1024gb = 1tb
Buffer相关方法:

Buffer.from(str) //将一个字符串转换为buffer
Buffer.alloc(size)//创建一个指定大小的Buffer
//需要赋值
buf[1]=1;
//呈现为几进制
buf.toString(16)//转为16进制
Buffer.allocUnsafe(size)//创建一个指定大小的Buffer,但是可能包含敏感元素

相关其他的方法可以参考官方文档:node.js官网

文件系统(fs)

文件系统(File System),通过Node.js操作系统文件,比如增删查改

  • 在node中,与文件系统交互是否重要,服务器的本质就是将本地的文件发给客户端
  • node通过fs模块实现与文件系统交互
  • 该模块提供了一些标准的文件访问API,来实现写入、打开、读取,以及交互

使用fs

//fs属于核心模块,不用进行下载,直接引入
const fs = require("fs");

文件

  1. 同步、异步条用
    · fs中都提供了两种形式可供选择:同步和异步
    · 同步会阻塞程序执行,就是除非程序执行完毕,才会执行下一步代码
    ·异步文件系统不会阻塞程序执行async,而是在操作完成时,通过回调函数将结果返回
  2. 使用
    同步文件系统
//引入js
var fs = require("fs")
//打开文件
var fd = fs.openSync("hello.text","w");
//向文件写入内容
fs.write(fd,"吃饭了吗")
//fs.writeSync(fd,string,position,encoding)
fs.write(fd,"吃饭了吗",20)//20表示写入的位置离初始位置是否空20格
//encoding
//关闭文件表示写入的编码
fs.closeSync(fd);

异步文件系统
异步请求一般都会通过回调函数的形式输出
fs.open("helo.text","w",function(err,fd){
	console.log("回调函数")
	if(err){
	}else{
		fs.write(fd,"写入的内容",function(err){
		if(!err){
		
		console.log("写入成功")
		}
		//关闭文件
		fs.close(fd,function(err){
		if(!err){console.log("关闭成功")}
})
})
	}
})

简单文件
在这里插入图片描述
不需要打开文件之后再写入,直接writeFile写入
options参数说明
在这里插入图片描述
这个方法是全部覆盖文件中的内容,就是重新写入
如果想要以追加的形式写入flag="a"

往指定的路劲写入文件
hello.text改成绝对路劲fs.writeFile(“绝对路径”,“这是写入的内容”,{flag=“w”})

流式文件写入
一个文件的内容写入到另一个文件里面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
官网:官网学习fs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值