美文网首页Node.js
Node.js入门(上)

Node.js入门(上)

作者: key君 | 来源:发表于2019-11-15 15:56 被阅读0次
    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入门(上)

        本文链接:https://www.haomeiwen.com/subject/hfjjictx.html