You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

5.8 KiB

nodejs

尚硅谷 超哥

console.log(arguments)//打印回调函数中的参数

进程和线程

进程

负责为程序运行提供必备的环境

相当于工厂中的车间

线程

计算机中的最小单位,负责执行进程中的任务

工厂中的工人

nodejs简介

  • 跨平台,运行于服务器的js运行环境
  • V8引擎,事件驱动,非阻塞,异步IO模型
  • 单线程,可用分布式拓展
  • 开源

使用Node

node file.js

es-checker:查看es支持度,可以全局安装

一 基础

1.1 模块

缺陷:

  • 没有模块系统

  • 标准库较少

  • 没有标准接口

  • 缺乏管理系统

node.js不能使用import

nodejs的模块实在一个函数中,不是全局作用域

//单个
//模块文件
//testModule.js

function a() {
	// body...
}
module.exports=a;

//引入文件
//main.js
let testModule=require('./testModel');//可以不用加后缀,但是前面的./必须
testModule();

// 多个1
//模块文件
//testModule.js
var func1 = function() {
   console.log("func1");
};
var func2 = function() {
   console.log("func2");
};
exports.function1 = func1;
exports.function2 = func2;

//引入文件
//main.js
let testModule=require('./testModel');//可以不用加后缀,但是前面的./必须
testModule.function1();
testModule.function2();

// 多个2
//模块文件
//testModule.js
let a=function() {
	console.log("a");
}
let b=function() {
	console.log("b");
}
module.exports={
	a,
	b
}

let testModule=require('./testModel')
testModule.a();
testModule.b()

基本内置模块

os模块

//模块都需要导入包 let os=require("os");

let os=require('os');
hostname();//主机名
type();//系统名
platform();//编译时系统名
arch();//系统架构
release();//发行版本
uptime();//操作系统运行时间,单位为秒
loadavg();//返回一个1,5,15分钟平均负载的数组
totalmem();//返回系统总内存
freemem();//空闲内存
cpus();//数组,每个cpu信息
networkInterfaces();//获取网络接口列表

url模块

let url=require("url")

console.log("将url字符串转化为url对象");
url.parse();
console.log("将url对象转化为url字符串");
url.format(urlObj);
console.log("组合变数,构造url字符串");
url.resolve(fron,to);

Query String模块

util模块

全局对象

global

package

-package.json 描述文件(必须)

-bin 可执行二进制文件

-lib js文件

-doc 文档

-test 单元测试

不能写注释

npm命令

  • npm -v 查看npm版本
  • npm version 查看所有模块版本
  • npm search 包名 搜索包
  • npm install/i 包名 安装包
  • npm remove/r 包名 删除包 或者uninstall
  • npm install --save/-S 安装包并添加到依赖
  • npm install 下载当前项目所有依赖
  • npm install -g 安装到全局(一般都是工具)
  • npm list 查看已经按照的包

初始化项目 npm init

npm国内镜像

npm i cnpm -g

导包本级找不到,会向上继续找,一直到根目录,如果找不到,报错

Buffer(缓冲区)

-Buffer 的结构和数组很像,操作方式也很像

原生数组,性能比较差

原生数组存不了2进制文件

核心对象,不用导入

存储的是2进制,显示为16进制

let str= "Hello World!";
let buf = Buffer.form(str);
console.log(buf);//存储的是二进制

let a = Buffer.alloc(x)创建定长Buffer

let b = Buffer.allocUnsafe(x)创建不初始化的空间的Buffer,但是含有敏感数据,但是效率高,因为省略了初始化控件的步骤

buffer创建后大小不可更改,否则会出现内存错误,因为buffer在内存上操作

给buffer中元素操作,不能超过256,否则会溢出

.toString将Buffer转化为字符串

存到缓冲区Buffer.from(str)

文件系统fs

const fs = require("fs");

同步文件操作和一部文件操作

同步会阻塞程序运行,必须等待文件行为完成

异步是等操作完成时通过回调函数返回内容

  • 文件写入(同步) 出现一场会完蛋
//打开文件
fs.openSync(path,flags[,mode])
	- path文件路径
	- flags操作类型
		r只读
		w写入
	-mode(可选),设置文件操作权限,一般不写
	//该方法会返回一个文件对象(文件描述符)
	//let fd =fs.openSync("hellow.txt","w")
	
//写入文件
	fs.writeSync(fd(文件描述符),string[,position(写入起始位置)[,encoding]])
		position起始位置
		encoding写入编码,默认utf-8
	//fs.writeSync(fd,"Hello World!");
//保存关闭文件
	fs.closeSync(fd);
  • 文件写入(异步)
//打开文件
fs.open(path[, flags[, mode]], callback),结果是回调函数
	path <string> | <Buffer> | <URL>
    flags <string> | <number> 请参阅对文件系统 flags 的支持 默认值: 'r'
    mode <string> | <integer> 默认值: 0o666 可读可写
    callback <Function>
    err <Error>
    fd <integer>
    //fs.open("filename","w",(err,fd)=>{})
        
//写入文件
        fs.write(fd, buffer[, offset[, length[, position]]], callback)//在回调函数中执行
    
//关闭文件
    fs.close(fd[, callback])
        
  • 简单文件写入
fs.writeFile(fs.writeFile(file, data[, options], callback))
fs.writeFileSync(file, data[, options])
  • 流文件写入(更好印度贵大文件和性能解决方案)
let fd = fs.createWriteStream(path[,option])
fd.once("open",()=>{console.log("监听打开事件,因为只会生效一次,所以")})
fd.wirte(Str)
fd.close()//不能使用这个,否则会瞬间关闭,后面的写入会失效
fd.end();//这个可以正常关闭
  • 读取性质的参考api