Node.js入门(上)

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())

你可能感兴趣的:(Node.js入门(上))