• Node.js概述1


    为什么我们要学习Node.js?

    1. 认为:

      • Node.js就学习一周,时间比较短,不重要
      • 将来工作我后端又不用Node.js做,我们又java/python/php/c,为什么要在意它
      • Node.js接下来项目中又不用,不用好好学,不用在意
    2. 重要性?

      • Node.js可以说是对js功能的扩展,比如: Node.js可以操作文件,数据库
      • Node.js是webpack的底层语言,如果Node.js不了解,那么我们webpack学不好
      • Node.js是现在vue/React中构建项目的一环,如果学不好,那么会导致Vue/React基础不好
      • Node.js可以充当前后端连接的一个桥梁
      • Node.js也可以当做后端这个角色来看,如果我们想和后端配合的更好,那么我们必须了解后端,Node.js可以说是我们接触后端的一个方式
      • Node.js现在已经成为很多企业的职位要求了
    3. Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境

      • 服务端的js有什么能力?(服务器)
    4. Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效

      • Node.js功能
        • 事件驱动
        • 非阻塞I/O模型【 异步的输入输出,比如: 文件操作、数据库操作 等 】

    Node.js文件的运行?

    1. 使用Node.js编译器
    2. 使用命令运行

    Node.js文件的实时监听改动

    1. nodemon

    Node.js版本

    1. Current [ 最新的版本 ] - 小白鼠
    2. LTS - 长期稳定版本

    Node.js的模块化问题

    1. Node.js采用了Common.js模块化
    2. 应用
      • 内置模块 -> 可以直接使用
    const fs = require('fs') // Common.js 模块引入方式
    /* 
      * fs 是一个对象
        * 定义的fs 其实拿的是一个地址,地址我们希望是稳定不变的,所以const
    */
    
    // fs.readFileSync // 同步读
    // fs.readFile // 异步读 
    
    • 第三方模块 -> Node.js没有的 类似于插件
    /* 
      * 类似插件
        * 我们现在想在我们的当前文件中引入带有功能的插件
        * 前端第三方模块全部都在一个网站中: www.npmjs.com 
      * 使用
        *  1. 安装【 npm/cnpm/yarn 】  
        *  2.  cnpm i request -S/-D
          *  -S  生产环境
          *  -D  开发环境  
          * 
      * 问题: 这里是否存在跨域?
          * 不存在   Node.js是运行在服务端的,不是浏览器端,没有同源策略
          * 
      ! 总结
          ! 第三方模块使用? 将来别人项目中使用了你没有用过的东西,怎么办?
            ! 1. npm.js 查阅文档
            ! 2. 先写单案例测试
            ! 3. 记录使用文档,记录自己博客中
    
    */
    
    const request = require('request')
    
    request('https://m.lagou.com/listmore.json', function (error, response, body) {
      console.log('error:', error); 
      console.log('statusCode:', response && response.statusCode); 
      console.log('body:', body); 
    });
    
    • 自定义模块
    /* 
      * 自定义模块
        * 自己创建模块,自己使用
        * 类型: 
          *  1. 函数
          *  2. 对象
          *  3. 字符串
    */
    
    
    // 1. 定义模块
    const people = {
      name: '西阁',
      sex: 'man',
      age: 18
    }
    
    
    // 2. 导出模块
    
    module.exports = people 
    
    
    // 3. 自定义模块导入
    const people = require('./3-自定义模块定义.js')
    
    console.log('people.name:', people.name )
    
    1. 模块化解决的是什么问题?

      • js中可以引用其他类型文件(html css sass )
    2. 自定义模块上传实现步骤 【 公司中应用比较多 】

        1. 创建文件夹,注意命名不要冲突
        1. 创建package.json文件
        • npm init / npm init -y
        1. 创建了 index.js, 里面封装任意一个功能
        1. 创建一个 npm.js 账号
        • 发送一个邮箱连接激活【 手动点 】
        1. 保证我们当前的源是 npm 源
        • $ nrm use npm
        1. 登录账号
        • $ npm adduser
        1. 上传
        • $ npm publish

    JSON.stringify / JSON.parse

    1. 字符串、对象互相转换
    2. 拷贝
    const fs = require('fs')
    const data = fs.readFileSync('./data.json','utf8')//字符串
    const newData = JSON.parse( data )//将JSON字符串转为一个对象
    const newStr = JSON.stringify( newData )//将 JavaScript 对象转换为 JSON 字符串
    const state = {
      msg: '千锋教育',
      obj: {
        x: 1,
        y: 2
      }
    }
    // 深拷贝 -> 1. 递归  2. JSON序列化实现
    const newState = JSON.parse(JSON.stringify( state ))
    newState.msg = " hello Node.js "
    console.log('state',state)
    console.log('newState',newState)
    

    querystring 内置模块

    1. 使用场景
      • 用于处理url上的查找字符串
    /* 
      ! querystring - 应用场景: 处理url查找字符串
        ! 1. querystring.parse      string -> object 
        ! 2. querystring.stringify  object -> string
        ! 3. querystring.escape     中文转码
        ! 4. querystring.unescape   中文解码
    */
    const qs = require('querystring') 
    const url = require('url')
    // console.log("西阁: qs", qs)
    // ! 1. parse
    const str = 'https://detail.tmall.com/item.htm?spm=a230r.1.14.6.7a344d82XrCvx0&id=604098442154&cm_id=140105335569ed55e27b&abbucket=2'
    const newObj = qs.parse(url.parse( str ).query,'&','=')
    // console.log("西阁: newObj", newObj)
    /* 
       {
        spm: 'a230r.1.14.6.7a344d82XrCvx0',
        id: '604098442154',
        cm_id: '140105335569ed55e27b',
        abbucket: '2'
      }
    */
    
    // ! 2. stringify
    const newStr = qs.stringify( newObj )
    // console.log("西阁: newStr", newStr)
    
    
    // ! 3. escape
    
    const str1 = 'city=北京' 
    
    const city = qs.escape( str1 )
    console.log("西阁: city", city) // city%3D%E5%8C%97%E4%BA%AC
    
    // !4. unescape 
    
    const cityCape = qs.unescape( city )
    console.log("西阁: cityCape", cityCape)
    
    

    path

    1. 使用场景
      • 用于处理绝对路径/磁盘路径
    2. 问题: 浏览器中全局对象是?Node.js全局变量?
      • 浏览器中全局对象: window
      • Node.js全局变量: global
    const path = require('path')
    console.log("西阁: path", path)
    
    
    // console.log( __dirname ) // 全局变量       
    /* e:19111-Node.jsday01code5-内置模块  */
    
    
    // const pathUrl = path.join( __dirname, 'aa')
    const pathUrl = path.resolve( __dirname, 'aa')
    console.log("西阁: pathUrl", pathUrl)
    
    
  • 相关阅读:
    RTSP视频流媒体智能分析平台EasyNVR中的H264及H265编码视频存储计算方法介绍
    RTSP协议视频平台EasyNVR内H265编码EasyWasmPlayer播放器如何优化起播时的快照功能?
    RTSP协议视频智能分析平台EasyNVR如何获取云端录像的视频快照截图?
    RTSP拉流协议视频智能分析平台EasyNVR在Chrome浏览器播放视频windows内存占用过高如何解决?
    jquery基础
    js链式编程
    js设计模式--单体模式
    js接口
    js的面向对象
    js函数
  • 原文地址:https://www.cnblogs.com/lilansheng/p/12089989.html
Copyright © 2020-2023  润新知