我是靠谱客的博主 坚定八宝粥,最近开发中收集的这篇文章主要介绍node的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 简介

    1. 是什么?  Node.js是一个开源,跨平台的javaScript运行环境. (几乎任何项目流行工具都能使用node.js)
    2. 为什么?  Node.js 是一个底层的平台。 为了方便,社区在 Node.js 上构建了数千个库。
    3. npm:  2009年js诞生,同年npm(Node Package Manager)第一版发布,npm内置在nodejs中,开发者将开发的代码如Jquery放到npm中,在js里面可以直接管理下载相关代码.2020年nodejs已经发布第15版,
    4. 常用框架工具:
      1. AdonisJs: 一个全栈框架,高度专注于开发者的效率、稳定和信任。 Adonis 是最快的 Node.js Web 框架之一。
      2. Express: 提供了创建 Web 服务器的最简单但功能最强大的方法之一。 它的极简主义方法,专注于服务器的核心功能,是其成功的关键。(2010年开始)
      3. Fastify: 一个 Web 框架,高度专注于提供最佳的开发者体验(以最少的开销和强大的插件架构)。 Fastify 是最快的 Node.js Web 框架之一。
      4. Gatsby: 一个基于 React、由 GraphQL 驱动的静态网站生成器,具有非常丰富的插件和启动器生态系统。
      5. hapi: 一个富框架,用于构建应用程序和服务,使开发者可以专注于编写可重用的应用程序逻辑,而不必花费时间来搭建基础架构。
      6. koa: 由 Express 背后的同一个团队构建,旨在变得更简单更轻巧。 新项目的诞生是为了满足创建不兼容的更改而又不破坏现有社区。
      7. Loopback.io: 使构建需要复杂集成的现代应用程序变得容易。
      8. Meteor: 一个强大的全栈框架,以同构的方式使用 JavaScript 构建应用(在客户端和服务器上共享代码)。 曾经是提供所有功能的现成工具,现在可以与前端库 React,Vue 和 Angular 集成。 也可以用于创建移动应用。
      9. Micro: 提供了一个非常轻量级的服务器,用于创建异步的 HTTP 微服务。
      10. NestJS: 一个基于 TypeScript 的渐进式 Node.js 框架,用于构建企业级的高效、可靠和可扩展的服务器端应用程序。
      11. Next.js: 一个 React 框架,可为你提供生产所需的所有功能的最佳开发者体验:混合静态和服务器渲染、TypeScript 支持、智能捆绑、路由预取等。
      12. Nx: 使用 NestJS、Express、React、Angular 等进行全栈开发的工具包! Nx 有助于将开发工作从一个团队(构建一个应用程序)扩展到多个团队(在多个应用程序上进行协作)!
      13. Sapper: Sapper 是一个用于构建各种规模的 Web 应用程序的框架,具有出色的开发体验和灵活的基于文件系统的路由。还提供 SSR 等!
      14. Socket.io: 一个实时通信引擎,用于构建网络应用程序。
      15. Strapi: Strapi 是一个灵活的开源 Headless CMS,可使开发者可以自由选择自己喜欢的工具和框架,同时还允许编辑人员轻松地管理和分发其内容。 通过使管理面板和 API 可以通过插件系统进行扩展,Strapi 使全球最大的公司能够加速内容交付,同时构建优美的数字体验。
  2. 安装

    1. node安装包地址 
    2. 安装步骤
  3. 使用

    1. 浏览器和nodejs的区别
      1. 相同点: nodejs和浏览器都是运行环境,都能解析javascript程序,都能识别ECMAScript语法
      2. 不同点:浏览器可以使用Bom和Dom,node可以操作文件
      3. nodejs的本质就是安装了chrom v8 js引擎的一个j服务器端s运行环境
    2. v8
      1. v8是为Google chrome 提供的js引擎,他负责出理执行js代码,V8 提供了执行 JavaScript 的运行时环境。 DOM 和其他 Web 平台 API 则由浏览器提供。 其他引
      2. 其他引擎
        1. Firefox 具有 SpiderMonkey
        2. Safari 具有 JavaScriptCore(又称为 Nitro)
        3. Edge 最初基于 Chakra,但最近使用 Chromium 和 V8 引擎进行了重建。
    3. 运行node
      命令行运行node脚本,node 应用程序文件名称,
      node app.js

       

    4. 退出node

      process.exit(0)// 退出码是0,表示正常退出

      SIGKILL 是告诉进程要立即终止的信号,理想情况下,其行为类似于 process.exit()

      SIGTERM 是告诉进程要正常终止的信号。它是从进程管理者(如 upstart 或 supervisord)等发出的信号。

      const express = require('express')
      const app = express()
      
      app.get('/', (req, res) => {
        res.send('你好')
      })
      
      const server = app.listen(3000, () => console.log('服务器已就绪'))
      
      process.on('SIGTERM', () => {
        server.close(() => {
          console.log('进程已终止')
        })
      })
      
      process.kill(process.pid, 'SIGTERM')

       

    5. 读取环境变量

      process.env.NODE_ENV // 默认设置为development,(开发环境变量),程序运行前设置成production,即可指定获取生产环境变量

       

    6. 使用REPL
      REPL==>read,evaluate,print,loop 写入,取值,输出,循环==>交互式顶层构件,是一个简单的,交互式的编程环境
      node script.js 使用node执行js脚本命令,直接输入node回车进入REPL模式
      tab的补全功能是REPL模式的最大交互特点

      global.  按下tab键,查询全局变量
      如果在某些代码之后输入 _,则会打印最后一次操作的结果。
      .help: 显示点命令的帮助。
      .editor: 启用编辑器模式,可以轻松地编写多行 JavaScript 代码。当处于此模式时,按下 ctrl-D 可以运行编写的代码。
      .break: 当输入多行的表达式时,输入 .break 命令可以中止进一步的输入。相当于按下 ctrl-C。
      .clear: 将 REPL 上下文重置为空对象,并清除当前正在输入的任何多行的表达式。
      .load: 加载 JavaScript 文件(相对于当前工作目录)。
      .save: 将在 REPL 会话中输入的所有内容保存到文件(需指定文件名)。
      .exit: 退出 REPL(相当于按下两次 ctrl-C)。

       

    7. 命令行接收参数

      node app.js jone //直接输入参数
      node app.js name=jone // 指定变量名传入
      process 接收参数【node命令完整路径, 被执行文件完整路径, 其他参数】

       

    8. 输出
      node提供一个console模块和浏览器的console几乎没差别

      console.log('123') // 控制台打印代码
      
      console.log('我的%s已经%d岁', '猫', 2) // 我的猫已经2岁了
      // %s 会格式化变量为字符串
      // %d 会格式化变量为数字
      // %i 会格式化变量为其整数部分
      // %o 会格式化变量为对象
      
      console.clear() // 清除控制台
      
      console.count() // 元素计数
      
      console.trace() // 打印堆栈踪迹
      
      console.time('doSomething()') // 方法开始时间
      doSomething()//掉用方法,测量方法执行所需的时间。
      console.timeEnd('doSomething()') // 方法结束时间
      
      console.log() // 非常适合在控制台中打印消息。 这就是所谓的标准输出(或称为 stdout)。
      
      console.error() // 会打印到 stderr 流。

       

    9. 输入
      node提供了一个readline模块,可用process。stdio标准输入流获取输入信息

      const readline = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout
      })
      
      readline.question(`你叫什么名字?`, name => {
        console.log(`你好 ${name}!`)
        readline.close()
      })

      可以安装inquirer.js提供完成的解决方案
      安装:npm install inquirer

      const inquirer = require('inquirer')
      
      var questions = [
        {
          type: 'input',
          name: 'name',
          message: "你叫什么名字?"
        }
      ]
      
      inquirer.prompt(questions).then(answers => {
        console.log(`你好 ${answers['name']}!`)
      })

       

    10. 引用:
      导出一个对象属性

      // 定义变量
      const student= {
          name: 'zhangsan',
          age: 18
      }
      //公开
      export.student= student
      // 引入
      const item = require('student')
      // 使用
      item.student

      导出一个对象

      // 定义
      const student = {
          name: 'zhangsan',
          age: 18
      }
      // 公开
      module.exports = student
      // 另一文件引入
      const item require('student')
      // 使用
      item // 就是student

       

    11. 包管理
      npm是node内置的依赖包管理工具
      npn init 会生成一个package.json的文件

      1. 依赖包名和指定版本

      2. 运行任务
         

        {
          "scripts": {
            "watch": "webpack --watch --progress --colors --config webpack.conf.js",
            "dev": "webpack --progress --colors --config webpack.conf.js",
            "prod": "NODE_ENV=production webpack -p --config webpack.conf.js",
          },
        }

        运行命令 npm run watch | dev | prod 

    12. 依赖包安装位置
      本地安装: 软件包会被安装到当前文件树中的 node_modules 子文件夹下。
      全局安装: 使用 -g 标志,npm root -g查看全局安装指定的位置

    13. package.json
      npm的package和yarn详情

    14. package-lock.json
      用于解决版本不确定时候,安装依赖不一致问题而生成的文件,从npm5以后才有的

      {
        "requires": true,
        "lockfileVersion": 1,
        "dependencies": {
          "ansi-regex": {
            "version": "3.0.0",
            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.
      0.0.tgz",
            "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
          },
          "cowsay": {
            "version": "1.3.1",
            "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz"
      ,
            "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM
      Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",
            "requires": {
              "get-stdin": "^5.0.1",
              "optimist": "~0.6.1",
              "string-width": "~2.1.1",
              "strip-eof": "^1.0.0"
            }
          },
          "get-stdin": {
            "version": "5.0.1",
            "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.
      1.tgz",
            "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="
          },
          "is-fullwidth-code-point": {
            "version": "2.0.0",
            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/
      is-fullwidth-code-point-2.0.0.tgz",
            "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
          },
          "minimist": {
            "version": "0.0.10",
            "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10
      .tgz",
            "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
          },
          "optimist": {
            "version": "0.6.1",
            "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
            "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
      
            "requires": {
              "minimist": "~0.0.1",
              "wordwrap": "~0.0.2"
            }
          },
          "string-width": {
            "version": "2.1.1",
            "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
            "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
            "requires": {
              "is-fullwidth-code-point": "^2.0.0",
              "strip-ansi": "^4.0.0"
            }
          },
          "strip-ansi": {
            "version": "4.0.0",
            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
            "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
            "requires": {
              "ansi-regex": "^3.0.0"
            }
          },
          "strip-eof": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
            "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
          },
          "wordwrap": {
            "version": "0.0.3",
            "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
            "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
          }
        }
      }

      version: 指定安装的确定版本
      resolved: 软件包地址
      integrity: 校验包字符转

    15. 查看依赖包的版本

      npm list //查看安装依赖列表
      npm list -g // 查看全局安装依赖列表
      npm list --depth=0 // 查看顶层的依赖列表
      npm list jquery// 查看jquery的安装
      npm view jquery version // 查看npm最新可用的jquery的版本号
      npm install jquery @1.1.0 //通过@后面跟着指定要安装的依赖的版本号

       

    16. npx nodejs 的包运行器
      安装此包之后,可以直接运行依赖包命令而不需要安装

      npx cowsay "你好" // 指定依赖执行
      npx node@12 -v #v12.14.1 myscript.js // 使用指定版本的node执行依赖
      npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 // 执行指定url的代码片段
      

       

    17. 事件循环
      事件循环详解

      1. 阻塞时间循环
        任何花费太长时间才能将控制权返回给时间循环的js代码,都会阻塞页面中任何js代码执行,也就是只有一条跑道,你不下去,下一个选手上不来,导致页面渲染卡顿,比如浏览器页面单击滚动不生效等

      2. nodejs是单线程非阻塞的io(注意不要阻塞线程:无限循环或者同步的网络调用),但是,通过Libuv 事件循环,实现了异步操作,提高效率,
        Libuv 是 Node.js 关键的一个组成部分,它为上层的 Node.js 提供了统一的 API 调用,使其不用考虑平台差距,隐藏了底层实现。它是一个对开发者友好的工具集,包含定时器,非阻塞的网络 I/O,异步文件系统访问,子进程等功能. 它封装了 Libev、Libeio 以及 IOCP,保证了跨平台的通用性.所以实际上,Node.js 虽然说是用的 Javascript,但只是在开发时使用 Javascript 的语法来编写程序。真正的执行过程还是由 V8 将 Javascript 解释,然后由 C/C++ 来执行真正的系统调用,所以并不需要过分担心 Javascript 执行效率的问题.
        浏览器每个有选项卡都有一个时间循环,将进程隔离开,避免使用繁重处理的进程阻碍整个浏览器页面的进行
        特点:
        每个进程之间相互独立
        线程之间数据共享
        一个进程结束,该进程中所有线程内存都会释放
         

      3. 正常的消息队列执行时候是按照先进后出的顺序,但是timeout会修改进栈顺序

      4. 作业队列是es6的新概念,Promise

    18. nextTick
      事件循环一次称为一个滴答,在一个滴答完成时,下一个滴答开始之前指定此方法,直接执行不是进入执行队列
      setTimeout是在下一个滴答结束时调用

      process.nextTick(() => {
        //做些事情
      })
    19. setImmediate
      异步执行代码时使用,会在下一个事件循环的迭代中执行回调,相当于setTimeout设置时间为0时的功能

      setImmediate(() => {
        //运行一些东西
      })

       

    20. setTimeout
      延迟执行回调方法,单位毫秒

      const id = setTimeout(() => {
        // 应该在 2 秒之后运行
      }, 2000)
      
      // 手动删除延时操作
      clearTimeout(id)

       

    21. setInterval()
      定时器,每隔一段时间执行回调函数

      const id = setInterval(() => {
        // 每 2 秒运行一次
      }, 2000)
      
      clearInterval(id)

      由于以写函数的执行时间不定,为防止前一次回调未完成就到了下一次的执行时间,可以用setTimeout递归代替定时器  

      const myFunction (){
          setTimeout(()=>{
              myFunction()
          }, 100)
      }
       myFunction()
    22. 回调
      回调: 在函数的参数中,传递一个函数,在js中具有顶级函数,这些函数被分配给变量并传给其他函数(高阶函数)
      在window。load中监听所有客户代码封装的事件,在页面准备就绪时候运行回调函数
      js默认是同步的,无法创建线程,不能并行,解决想要在执行时才被使用的代码,产生了回调,将一个函数作为参数传递给另一个函数,传递的参数函数叫做回调函数,接收参数的函数叫做高阶函数
      相应onClickonMouseOveronChangeonSubmit 等,需要获取浏览器的API来实现,nodejs引入非阻塞I/O,并扩展到文件访问和网络访问
       

      document.getElementById('button').addEventListener('click', () => {
        //被点击
      })

      多级回调显示繁琐,可以用promise来代替
       

      window.addEventListener('load', () => {
        document.getElementById('button').addEventListener('click', () => {
          setTimeout(() => {
            items.forEach(item => {
              //你的代码在这里。
            })
          }, 2000)
        })
      })
      
      // todo
      new Promise((resolve, reject)=>{
          window.addEventListener.load()
      }).then(()=>{
          document.getElementById('button').addEventListener.click()
      }).then(()=>{
          setTimeout(() => {
            items.forEach(item => {
              //你的代码在这里。
            })
          }, 2000)
      })
      

       

    23. Promise
      同步:按照交付顺序执行人物
      异步:与交付顺序无关,按照需求执行任务(避免排在前面人物耗时很长,后面任务一直等待)

      1. promise的创建与消费结构图

      2. 链式promise

      3. 错误处理:链式错误

      4. 编排promise:

        1. promise.all所有promise都执行完,再执行操作

        2. promise.race()只要有一个promise执行完,立即执行操作

      5. 异步操作常见语法

        1. 事件监听

          document.getElementById('#start').addEventListener('click', start, false);
          function start() {
            // 响应事件,进行相应的操作
          }
          // jquery on 监听
          $('#start').on('click', start)
        2. 回调

          // 比较常见的有ajax
          $.ajax('http://www.wyunfei.com/', {
           success (res) {
             // 这里可以监听res返回的数据做回调逻辑的处理
           }
          })
          
          // 或者在页面加载完毕后回调
          $(function() {
           // 页面结构加载完成,做回调逻辑处理
          })

 

 

  1. Async Await
    同步异步几个基本概念
  2. $on $emit
  3. http
  4. fs
  5. path
  6. os
  7. emitter
  8. buffer
  9. error
  10. ts
  11.  

最后

以上就是坚定八宝粥为你收集整理的node的使用的全部内容,希望文章能够帮你解决node的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部