node基础学习

2023-05-16

node学习链接Node.js 简介

1、node退出码

1

2

3

console.log(111)

process.exit(0)         // 默认情况下,退出码为 0,表示成功

console.log(222)        // 不执行

2、node终止


 1 const express = require('express')
 2 const app = express()
 3 
 4 app.get('/', (req, res) => {
 5   res.send("hello world")
 6 })
 7 
 8 app.listen(3000, ()=> {
 9   console.log('启动')
10 })
11 
12 process.on('SIGABRT', () => {
13   console.log(11111)
14   server.close(() => {
15     console.log('进程已终止')
16   })
17 })
18 
19 setTimeout(()=> {
20   process.kill(process.pid, 'SIGTERM')        // 杀死进程
21 }, 3000)  

3、处理运行参数


 1 // 运行命令 node demo1.js name=a
 2 
 3 // argv 属性,该属性是一个包含所有命令行调用参数的数组。
 4 // 第一个参数是 node 命令的完整路径。
 5 // 第二个参数是正被执行的文件的完整路径。
 6 // 所有其他的参数从第三个位置开始。
 7 process.argv.forEach((val, index) => {
 8   console.log(`${index}: ${val}`)
 9 })
10 
11 /*
12 0: D:\node\node.exe
13 1: D:\code\node\demo1.js
14 2: name=a
15 */
16 
17 // 也可以通过创建一个排除了前两个参数的新数组来仅获取其他的参数:
18 const args = process.argv.slice(2)
19 console.log(args)  // [ 'name=a' ]
20 
21 // 使用 minimist 库处理参数 
22 // node demo1.js -a hh -b dd
23 const args = require('minimist')(process.argv.slice(2))
24 console.log(args)   // { _: [], a: 'hh', b: 'dd' }  


1 const minimist = require('minimist')
2 console.log(process.argv)   // [ 'D:\\node\\node.exe', 'D:\\code\\node\\demo03', '--name=a' ]
3 const args = minimist(process.argv.slice(2))
4 console.log(args)     // { _: [], name: 'a' }
5 console.log(args['name'])   // a  

4、控制台输出


 1 // 通过传入变量和格式说明符来格式化用语
 2 console.log('%s已经%d岁了', "小明", '5')    // 小明已经5岁了
 3 /*
 4 ** %s 会格式化变量为字符串
 5 ** %d 会格式化变量为数字
 6 ** %i 会格式化变量为其整数部分
 7 ** %o 会格式化变量为对象
 8 */
 9 
10 // console.clear()   // 清除控制台
11 
12 
13 // 元素计数: count 方法会对打印的字符串的次数进行计数,并在其旁边打印计数
14 const x = 5
15 const y = 2
16 console.count(x)    // 5: 1
17 console.count(x)    // 5: 2
18 console.count("aaa",x)    // aaa: 1
19 console.count("aaa",x)    // aaa: 2
20 console.count("aaaaa",x)  // aaaaa: 1
21 
22 
23 
24 // console.trace() 打印堆栈踪迹
25 fn1 = () => console.trace()
26 fn2 = () => fn1()
27 fn2()
28 
29 /*
30 ** at fn1 (D:\code\node\demo1.js:25:21)
31 ** at fn2 (D:\code\node\demo1.js:26:13)
32 ** at Object.<anonymous> (D:\code\node\demo1.js:27:1)
33 ** at Module._compile (internal/modules/cjs/loader.js:1072:14)
34 ** at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
35 ** at Module.load (internal/modules/cjs/loader.js:937:32)
36 ** at Function.Module._load (internal/modules/cjs/loader.js:778:12)
37 ** at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
38 ** at internal/main/run_main_module.js:17:47
39 */
40 
41 // 可以使用 time() 和 timeEnd() 轻松地计算函数运行所需的时间:
42 const doSomething = () => console.log('测试')
43 const measureDoingSomething = () => {
44   console.time('doSomething()')
45   //做点事,并测量所需的时间。
46   doSomething()
47   console.timeEnd('doSomething()')
48 }
49 measureDoingSomething() 
50 // 测试 
51 // doSomething(): 0.602ms
52 
53 // Progress ,可在控制台中创建进度条。 使用 npm install progress 进行安装。
54 const ProgressBar = require('progress')
55 const bar = new ProgressBar(':bar', { total: 10 })
56 const timer = setInterval(() => {
57   bar.tick()
58   if (bar.complete) {
59     clearInterval(timer)
60   }
61 }, 100)  

从命令行接受输入


 1 const readline = require('readline').createInterface({
 2   input: process.stdin,
 3   output: process.stdout
 4 })
 5 
 6 readline.question(`你叫什么名字?`, name => {
 7   console.log(`你好 ${name}!`)
 8   readline.close()
 9 })
10 
11 /*
12 这段代码会询问用户名,当输入了文本并且用户按下回车键时,则会发送问候语。
13 question() 方法会显示第一个参数(即问题),并等待用户的输入。 当按下回车键时,则它会调用回调函数。
14 */
15 
16 // Inquirer.js 软件包则提供了更完整、更抽象的解决方案。
17 var questions = [
18   {
19     type: 'input',
20     name: 'name',
21     message: "你叫什么名字?"
22   }
23 ]
24 
25 inquirer.prompt(questions).then(answers => {
26   console.log(`你好 ${answers['name']}!`)
27 })  

5、process.nextTick()

当将一个函数传给 process.nextTick() 时,则指示引擎在当前操作结束(在下一个事件循环滴答开始之前)时调用此函数

6、setImmediate()

当要异步地(但要尽可能快)执行某些代码时,其中一个选择是使用 Node.js 提供的 setImmediate() 函数

7、文件描述符


 1 const fs = require('fs')
 2 
 3 // 文件描述符是使用 fs 模块提供的 open() 方法打开文件后返回的
 4 fs.open('./a.txt', 'r', (err, fd) => {
 5   console.log(fd)   // 3
 6 })
 7 //fd 是文件描述符  
 8 
 9 // 该标志意味着打开文件用于读取
10 // r+ 打开文件用于读写。
11 // w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。
12 // a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。
13 // a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件  

8、文件属性


 1 const fs = require('fs')
 2 fs.stat('./a.txt', (err, stats) => {
 3   // 文件信息属性
 4   // console.log(stats)
 5   // 使用 stats.isFile() 和 stats.isDirectory() 判断文件是否目录或文件。
 6   // 使用 stats.isSymbolicLink() 判断文件是否符号链接。
 7   // 使用 stats.size 获取文件的大小(以字节为单位)。
 8   console.log(stats.isFile())       // true
 9   console.log(stats.isDirectory())  // false
10   console.log(stats.isDirectory())  // false
11   console.log(stats.size)           // 4
12 })  

9、文件路径


 1 const path = require('path')
 2 
 3 const note = '/a.txt'
 4 
 5 // dirname: 获取文件的父文件夹
 6 // basename: 获取文件名部分
 7 // extname: 获取文件的扩展名
 8 console.log(path.dirname(note))   //  /
 9 console.log(path.basename(note))  // a.txt
10 console.log(path.extname(note))   // .txt
11 
12 // 使用 path.join() 连接路径的两个或多个片段
13 const name = 'joe'
14 path.join('/', 'users', name, 'notes.txt')  // '/users/joe/notes.txt'
15 
16 // 可以使用 path.resolve() 获得相对路径的绝对路径计算
17 console.log(path.resolve('a.txt'))    // D:\code\node\a.txt
18 
19 // 如果指定第二个文件夹参数,则 resolve 会使用第一个作为第二个的基础
20 // path.resolve('tmp', 'joe.txt') //'/Users/joe/tmp/joe.txt' 如果从主文件夹运行。
21 
22 // 如果第一个参数以斜杠开头,则表示它是绝对路径
23 // path.resolve('/etc', 'joe.txt') //'/etc/joe.txt'
24 
25 // path.normalize() 是另一个有用的函数,当包含诸如 .、.. 或双斜杠之类的相对说明符时,其会尝试计算实际的路径:
26 // path.normalize('/users/joe/..//test.txt') //'/users/test.txt'  

10、文件读写


 1 const fs = require('fs')
 2 
 3 // 文件读取
 4 fs.readFile('./a.txt', 'utf-8', (err, data) => {
 5   if(err) {
 6     console.log(err)
 7     return
 8   }
 9   console.log(data)
10 })
11 
12 // 文件写入
13 // 默认情况下,此 API 会替换文件的内容(如果文件已经存在)
14 const content = "2222"
15 fs.writeFile('./a.txt', content, err => {
16   if(err) {
17     console.log(err)
18     return
19   }
20 })
21 
22 // 可以通过指定标志来修改默认的行为
23 const addContent = '3333'
24 fs.writeFile('./a.txt', addContent, { flag: 'a+'}, err => {
25   if(err) {
26     console.log(err)
27     return
28   }
29 })
30 // r+ 打开文件用于读写。
31 // w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。
32 // a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。
33 // a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件。
34 
35 // 将内容追加到文件末尾
36 const addContentAgain = "4444"
37 fs.appendFile('./a.txt',addContentAgain, err => {
38   if(err) {
39     console.log(err)
40     return
41   }
42 })  

11、文件夹操作


 1 const fs = require('fs')
 2 const path = require('path')
 3 const fsExtra = require('fs-extra')
 4 
 5 const foldername = './test'
 6 console.log(fs.existsSync(foldername))    // true 检查文件夹是否存在
 7 
 8 const newFolder = './testNew'
 9 fs.mkdirSync(newFolder)       // 创建文件夹
10 
11 // 使用 fs.readdir() 或 fs.readdirSync() 可以读取目录的内容, 返回相对路径
12 console.log(fs.readdirSync(foldername))  // [ 'aa.txt', 'bb.html', 'cc.js' ]
13 
14 // 获得完整路径
15 var pathList = fs.readdirSync(foldername).map(fileName => {
16   return path.join(foldername, fileName)
17 })
18 console.log(pathList) // [ 'test\\aa.txt', 'test\\bb.html', 'test\\cc.js' ]
19 
20 // 使用 fs.rename() 或 fs.renameSync() 可以重命名文件夹
21 fs.rename(newFolder, './test_new', err => {
22   if(err) {
23     console.log(err)
24     return
25   }
26 })
27 
28 // 使用 fs.rmdir() 或 fs.rmdirSync() 可以删除文件夹。
29 // 最好安装 fs-extra 模块,它是 fs 模块的直接替代品
30 fsExtra.remove('./test_new', err => {
31   if(err) {
32     console.log(err)
33     return
34   }
35 })  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node基础学习 的相关文章

随机推荐

  • 基于javafx的简单画图应用

    代码比较简单 xff0c 但初次接触javafx xff0c 会不知道从哪里下手 xff0c 多与其他人交流看看代码能让我们事半功倍 代码内容我就不多做解释 xff0c 自己有个思路知道有哪些函数该怎么下手就好 效果 xff1a 一共就只有
  • 【SpringBoot】日志文件基础教程

    日志的作用 发现和定位问题 在程序的执行过程中 如果出现了错误 我们就可以轻松的找到这个bug记录用户的登录日志 可以发现是正常用户还是恶意用户记录系统的操作日志 方便数据恢复记录程序的执行时间 SpringBoot的日志 我们在执行起项目
  • Royal TSX常见问题:解决远程桌面(RDP)连接错误

    Royal TSX mac版是一款帮助用户管理桌面的Mac桌面管理软件 xff0c Royal TSX for mac为你提供方便安全的访问远程系统 Royal TSX专为服务器管理员 系统工程师 开发人员和IT信息工作者开发设计 xff0
  • 二叉树的创建和基本操作(详解)

    文章目录 二叉树的创建 xff08 使用先序遍历 xff09 递归实现二叉树的遍历 xff1a 先序遍历 xff1a 中序遍历 xff1a 后续遍历 xff1a 一些二叉树基本操作 xff1a 求树的深度 xff1a 求树的结点个数 xff
  • c++内存四区以及new、delete用法

    c 43 43 内存四区 c 43 43 被执行时 xff0c 将内存大方向划分了四个区域 代码区 xff1a 存放函数体的二进制代码 xff0c 由操作系统进行管理的全局区 xff1a 存放全局变量和静态变量以及常量栈区 xff1a 由编
  • 【尚硅谷】HTML5+CSS3学习笔记 (七)CSS动画(含大量源码)

    xff08 七 xff09 CSS动画 61 61 本部分更多内容欢迎订阅专栏HTML 43 CSS学习专栏 xff0c 将持续更新 61 61 目录 xff1a xff08 七 xff09 CSS动画7 1 过渡 xff08 transi
  • 解决Vue报错解决Invalid prop: type check failed for prop “model“. Expected Object, got Array的问题

    在写项目的时候发生了类型匹配不符合的问题 xff0c 准确来说就是变量期望拿到的是一个对象 xff0c 但是实际上赋值给变量的是一个数组 这里我出现的问题是我的变量定义为对象 xff0c 却没有注意直接把res data xff08 数组
  • test测试类

    span class token keyword package span com span class token punctuation span chen span class token punctuation span test
  • 使用MariaDB数据库进行开发过程中遇到中文乱码的解决方式

    使用环境 xff1a idea2020版 Navicat Premium 步骤为 1 更改MariaDB默认编码格式 xff1a 在MariaDB目录的data下新建文件my cnf xff0c 并配置内容 然后重启MariaDB服务 my
  • Ubuntu22.04 VScode 安装与 OpenCV C++配置

    标题 xff1a Ubuntu22 04 VScode 安装与 OpenCV C 43 43 配置 OpenCV C 43 43 环境搭建详细图文移步 VScode 安装 下载安装包 Ubuntu软件商店安装的会出现无法输入中文 xff0c
  • Github + Hexo 搭建个人博客超详细教程

    Github 43 Hexo 搭建个人博客超详细教程 本文目录 generated with DocToc 网站搭建 本文目录1 安装node js2 添加国内镜像3 安装Git4 注册Github账号5 创建git仓库6 安装Hexo7
  • Maven的删除、安装、配置

    Maven的删除 安装 配置 文章目录 Maven的删除 安装 配置 64 toc 一 Maven删除二 下载安装Maven三 配置环境四 搭建本地仓库五 阿里云镜像六 从中央仓库下载需要的文件 点我进Gitee仓库 一 Maven删除 我
  • 2022年12月编程语言排行榜,数据来了!

    2022年迎来了最后一个月 xff0c 我们可以看到 xff0c 在这一年中编程语言起起伏伏 xff0c 有的语言始终炙手可热 xff0c 而有的语言却逐渐 没落 日前 xff0c 全球知名TIOBE编程语言社区发布了12月编程语言排行榜
  • 修改Keil工程的文件名

    在工程文件目录中 xff0c 将 uvprojx和 uvoptx重命名为目标文件名在工程文件目录中 xff0c 将包含原工程名的文件删除 xff0c 包括编译生成的Objects Listings和DebugConfig文件夹打开重命名好的
  • 聊聊ICMP协议及ping过程

    在当我们判断网络是否连通时 xff0c 使用最多的命令是ping xff0c traceroute xff0c 其是基于ICMP协议实现 xff0c 那么ICMP协议是什么 xff1f ICMP协议 ICMP xff08 Internet
  • Seata安装启动

    一 下载 https github com seata seata releases download v1 4 2 seata server 1 4 2 zip 二 启动 在安装路径下cmd seata server bat h 127
  • python matplotlib cannot import name ‘artist‘ from ‘matplotlib‘

    问题 xff1a import matplotlib pyplot as plt 报错 cannot import name 39 artist 39 from 39 matplotlib 39 无法从 matplotlib 导入名称 ar
  • 解决tomca导包 - org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception invoking method manageApp

    文章目录 前言两步解决导包到tomcat的问题总结 前言 本次问题是一次javaWeb导包部署到tomcat服务器上出现的问题 xff0c 问题原因 xff1a 是由于导包到idea上的jar包库 xff0c tomcat并没有该jar包
  • flex水平与垂直布局 弹性布局 垂直居中 水平平均分布

    弹性盒子元素会平均地分 span class token doctype lt DOCTYPE html gt span span class token tag span class token tag span class token
  • node基础学习

    node学习链接Node js 简介 1 node退出码 1 2 3 console log 111 process exit 0 默认情况下 xff0c 退出码为 0 xff0c 表示成功 console log 222 不执行 2 no