Node的好处:
1可以和后端有效沟通
2全栈应用
3工程化思想
Node.js是什么
是一个异步的事件驱动的js运行时(runtime就是程序运行的时候)
与前端不同:
JS核心的语法不变,但是操作的对象不同
前端:BOM DOM
后端:fs http buffer events os
nodemon插件:
安装nodemon 监听node代码变化的工具,会自动完成node服务器和数据库服务器的重启
npm install -g nodemon
nodemon使用
nodemon api.js
node的断点调试
使用vsc点击左边菜单的瓢虫
选择
image.png
打断点,点运行,项目里面会多了个json文件,就可以运行到断点了
内置模块os
获取内存占用率
新建一个api.js文件
//内置模块
const os = require('os')
const mem = os.freemem() / os.totalmem()
console.log(`内存占用率${mem.toFixed(2)}%`);
运行代码
node api.js
第三方模块download-git-repo插件和ora插件
download-git-repo插件:通过代码把github的项目clone下来
npm i download-git-repo -s
ora插件:加载中的圈圈
npm i ora -s
使用
//第三方模块
//异步io处理 从网络下载下来 再往文件中写
const download = require('download-git-repo')
//加进度条
const ora = require('ora')
const process = ora(`下载项目...`)
//转圈圈
process.start()
//第一个参数是路径 第二个参数是下载的文件夹(在同目录建了个test) 第三个是callback
download('github:su37josephxia/vue-template','test',err =>{
console.log(err ? err : 'Success');
if(err){
process.fail();
}else{
process.succeed();
}
})
promisify 把上面的代码包装成promise的方式
上面的写法是普通写法 可以再包一层变成promise的用法
async await用于异步串行任务比较好
//第三方模块使用
const repo = 'github:su37josephxia/vue-template'
const desc = 'test'
clone(repo,desc)
//异步io处理 从网络下载下来 再往文件中写
async function clone(repo,desc){
//用promise代替callback
//node内置模块
const {promisify} = require('util')
//promisify包一层就可以使用awit语法
const download = promisify(require('download-git-repo'))
//加进度条
const ora = require('ora')
const process = ora(`下载项目...`)
//转圈圈
process.start()
try {
await download(repo,desc)
} catch (error) {
process.fail();
}
process.succeed();
}
自定义模块
新建文件download.js
还是上面download代码
//自定义模块的写法
//异步io处理 从网络下载下来 再往文件中写
module.exports.clone = async function clone(repo,desc){
//用promise代替callback node内置库
const {promisify} = require('util')
//promisify包一层就可以使用awit语法
const download = promisify(require('download-git-repo'))
//加进度条
const ora = require('ora')
const process = ora(`下载项目...`)
//转圈圈
process.start()
try {
await download(repo,desc)
} catch (error) {
process.fail();
}
process.succeed();
}
然后在api.js调用
// 第三方模块使用
const repo = 'github:su37josephxia/vue-template'
const desc = 'test'
const {clone} = require('./download')
clone(repo,desc)
内置模块fs 同步操作和异步操作
//同步操作
const fs = require('fs')
const data = fs.readFileSync('./download.js')
//data是buffer 16进制
console.log(data.toString())
//异步操作
fs.readFileSync('./download.js',(err,data) => {
if(err) throw err
console.log(data.toString())
})
内置模块buffer 二进制处理
//c语言写的库
//buffer 处理二进制 用于TCP流 文件系统操作 其他上下文与八位字节流交互
//创建一个长度为10字节以0填充的buf
const buf1 = Buffer.alloc(10)
console.log(buf1)
//看a转二进制状态
const buf2 = Buffer.from('a')
console.log(buf2,buf2.toString())
//看中文转二进制状态
const buf3 = Buffer.from('只能')
console.log(buf3,buf3.toString())
//合并二进制
const buf4 = Buffer.concat([buf2,buf3])
console.log(buf4,buf4.toString())
网友评论