023-随笔-nodejs初探


nodejs初探

2021年8月11日

17:22

从cmd理解文件调用

  • 命令

dir打开

cd改变目录

md、rd创建、删除文件

  • 目录

. /当前目录(可以省略)

../上级目录

  • path环境变量

变量中有许多路径,命令(1)先在当前目录寻找对象,如果没有(2)再在path中的路径依次寻找,如果没有再报错。【作用域链】

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//``

var a = 100

 

function fn(){

 

var a = 200;

 

function fn2(){

 

var a = 300;

 

console.log(a);

}

 

fn2();

 

}

 

fn();

//

将要经常使用的程序或者文件加入环境变量。

2.进程和线程

进程

  • 负责为程序运行提供必备的环境。
  • 进程相当于工厂车间

线程

  • 最小计算单位,负责执行程序
  • 相当于工厂里面的工人

单线程

  • js是单线程

多线程

node.js

服务器端JavaScript运行环境。node.js扩大了js的适用范围,从前端到系统。

I/O操作阻塞线程问题。

用node执行

文件夹下node hello.js

创建一个js文件

/创建日期/

console.log(“HELLO”);

模块化

引入模块(一个js文件)

必须按照先后顺序(缺乏模块系统)

CommonJS具有模块功能

  • 一个js文件就是一个模块。

定义一个模块就是创建一个模块。

  • 每个js文件的js代码都是独立运行在函数中不是以全局变量。

别的模块无法访问。模块间是封闭的,需要暴露属性。

  • exports来暴露变量和方法。

exports.x = “晚上上一个文件的x”;

exports.fn = function(){}

模块引入

在一个js文件引入其他外部模块使用:

require(“传递文件的路径”);

路径以.或者..开头

”./文件.js“

使用require();引入后,该函数会返回一个对象

var md = require("./文件.JS");

对象【md】中包含了引入模块中export过的变量和函数。

例子:引入math模块进行运算

/文件1math.js/

exports.add=function(a,b){return a+b;}

exports.mul = function(a,b){return a*b;}

引用模块是,路径就是模块的标识。模块分为核心模块和文件模块。

核心模块由node.js提供,标识就是名字。

var fs= require(“fs”);

文件模块使用局对或者相对路径,相对路径需要./或许../

var math =require("./math.js");

math.add(1,2);

全局变量

global全局变量对象,所有的全局变量都是他的属性。

var a=2;局部变量

a=1;全局变量

console.log(global.a);

console.log(arguments);在函数里面运行

console.log(arguments.callee + “”);保存了单钱函数执行的对象

exports

  • 该对象用来将变量或者函数暴露到外部

requie

  • 函数,用来引入外部模块

module

  • 代表当前模块本身
  • exports就是module的属性
  • exports==module.exports

__filename

  • 当前模块的完整路径

__dirname

  • 当前模块所在文件夹的路径

module.exports和exports

module.exports:改对象(堆 )

exports:改变量(栈)

浅拷贝和深拷贝

新建对象只有一个内存地址

}중쳠황

模块放进文件夹,文件夹就是包。

  • 基本结构

包结构

  • package.json描述文件,整体描述(必须的)
  • bin文件夹可执行二进制文件
  • lib文件夹js代码
  • doc文件夹放文档功能性的
  • test文件夹放单元测试

包描述文件

dependencies依赖的包

description描述作用

devDependencies开发依赖

license权限

main主文件

name包的标识

ketwords

可以自动穿件,不能写任何注释。

  • 写了JS文件加个package.json就是一个包

包就是大模块。

通过npm实践。

NPM

不要大写

npm -v版本

npm帮助

npm search KEYWOED搜索关键词

npm install/i package当前目录局部安装(要有一个package.json:目录下npm init初始化)

npm install package -g全局安装

npm remove 包:删除

引入模块

直接require(“math”);

  • 项目文件

    • package.json(npm init)

    • npm_modules(npm安装一个包)

      • bao
      • bao2
    • index.js(初始化的接口)

缓冲区buffer

传输数据的介质

  • 结构和素组很像,但buffer一旦创建不能改变大小,内存位数和值溢出。
  • 数组不能存储二进制文件,buffer专门干这个
  • 以二进制储存,十六进制显示。元素范围是00~ff(0~255)8bit=1byte(字节)
  • buffer的一个元素占内存一个字节。

汉字占三个字节,字母一个字节。

fs文件系统

node操作文件

  • 引入var fs = require(“fs”);
  • sync同步

在内存里面打开了返回值描述符。

var fd = fs.openSync(“hello.txt”,“w”);

fs.writeSync(fd,string[,position[,encosing]]);

fs.closeSync(fd);

  • 不带sync异步,callback

var fs= require(“fs”);

fs.open(“path”,“w”,function(err,fd))

结果通过回调函数的参数返回:

err 错误对象,没有则为null

fd 文件的描述符

CTRL-/