发布时间:2024-05-05 14:01
node学习链接Node.js 简介
1 2 3 |
|
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)
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
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.(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 })
当将一个函数传给 process.nextTick()
时,则指示引擎在当前操作结束(在下一个事件循环滴答开始之前)时调用此函数
当要异步地(但要尽可能快)执行某些代码时,其中一个选择是使用 Node.js 提供的 setImmediate()
函数
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+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件
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 })
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'
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 })
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 })
小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体
Windows10中,如何改变鼠标光标(指针)的大小和颜色?
Linux进阶 | 万字详解Docker镜像的制作,手把手学会!
ECCV2018超分辨率MSRN:Multi-scale Residual Network for Image Super-Resolution
[ROC-RK3568-PC] 手把手教你打包能使用Etcher或dd命令烧写的Ubuntu系统固件
前后端分离:vue+springboot+shiro权限控制
面试官:Elasticsearch如何设计索引?满分答案来了
【漏洞预警】Apache Solr基于Velocity模板的远程命令执行漏洞
使用 Terraform 在阿里云上快速部署 MQTT 集群