• node.js概述,全局对象,模块,模块分类,包和npm,网址(URL)


    一、Node.js概述

    Node.js是运行在服务器端 JS 环境
    1、JS和Node.js的区别
        (1)JS运行在浏览器中,有多种解释器,存在代码兼容问题
                  Node.js运行在服务器端,只有谷歌V8引擎,不存在代码兼容问题
        (2)两者都有相同的自定义对象和内置对象
                         不同的是宿主对象
        (3)JS用于开发浏览器端用户交互,
                  Node.js用于后端开发,例如数据库访问、调用其他服务器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、网址
    官网:www.nodejs.org
    中文:www.nodejs.cn

    3、运行Node.js
    (1)脚本模式
    node 文件路径 回车
    (2)交互模式
    node 回车
    退出交互模式 : ctrl+c (按两次) 或者 ctrl+d

    4、特点
    单线程运行逻辑 线程是程序运行的单位

    二、全局对象

    可以在任意作用域下访问的对象
    1、global    (全局的,全球的)
        检测一个变量或者函数是否为全局的
        交互模式下,属于是在全局作用域下
        脚本文件下,不属于全局作用域下,变量和函数都是局部,解决了全局污染
    
    • 1
    • 2
    • 3
    • 4
    • 5

    JS下,全局global名字发生了变化:叫做window
    JS脚本文件下,属于全局作用域,存在全局污染

    > var a=1
    undefined
    > global.a
    1
    > function fn(){return 2}
    undefined
    > global.fn
    [Function: fn]
    > let b=3
    undefined
    > global.b
    undefined  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    //练习:编写脚本文件,声明变量,创建函数,使用global检测是否为全局
    var a=1
    function fn(){return 2}
    //使用global检测是否为全局
    //a和fn()不能使用global访问,当前文件不是在全局作用域下
    console.log(global.a) //undefined
    console.log(global.fn) //undefined
    ——————————————————————————
    //练习:编写文件01_window.js和01_html,把js文件嵌入到html中,检测js是否为全局
    01_html文件下代码

    01_window.js文件代码

    var a=1
    function fn(){return 2}
    console.log(window.a)
    console.log(window.fn)
    
    • 1
    • 2
    • 3
    • 4
    > var a=1
    undefined
    > global.a
    1
    > function fn(){return 2}
     undefined
    > global.fn
    [Function: fn]
    > let b=3
    undefined
    > global.b
    undefined
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    //练习:编写脚本文件,声明变量,创建函数,使用global检测是否为全局
    var a=1
    function fn(){return 2}
    //使用global检测是否为全局
    //a和fn()不能使用global访问,当前文件不是在全局作用域下
    console.log(global.a) //undefined
    console.log(global.fn) //undefined
    ——————————————————————————
    //练习:编写文件01_window.js和01_html,把js文件嵌入到html中,检测js是否为全局
    01_html文件下代码

    <script src='01_window.js'>script>
    
    • 1

    01_window.js文件代码
    var a=1
    function fn(){return 2}
    console.log(window.a)
    console.log(window.fn)

    2、console (控制台)
    console.log ( 1 ) 打印日志
    console.info ( 2 ) 打印消息
    console.warn ( 3 ) 打印警告
    console.error ( 4 ) 打印错误
    console.time( ’ ’ ) 开始计时
    console.timeEnd ( ’ ’ ) 结束计时

    //info 消息
    //warn 警告
    //error 错误
    console.log(1) //打印日志
    console.info(2) //打印消息
    console.warn(3) //打印警告
    console.error(4) //打印错误
    ————————————————
    //统计程序运行时间
    //开始计时
    console.time(‘for’)
    for (var i=1;i<=Math.pow(2,18);i++ )
    {
    }
    //结束计时
    console.timeEnd(‘for’) //for: 2.786ms

    //开始计时 while
    console.time(‘while’)
    var m=1
    while (m<=Math.pow(2,18))
    {
    m++
    }
    //结束计时
    console.timeEnd(‘while’) //while: 1.603ms

    //开始计时
    console.time(‘do-while’)
    var j=1
    do
    {
    j++
    }
    while (j<=Math.pow(2,18));
    //结束计时
    console.timeEnd(‘do-while’) //do-while: 1.548ms

    3、process
    进程对象,计算机上启动的软件都会产生相应的进程,每个进程都会占用一定的资源(内存、cpu……)
    process.arch 查看当前CPU架构
    process.platform 查看当前操作系统
    process.pid 查看当前进程编号(系统随机分配)(目的是为了区分不同的进程)
    process.kill ( ) 结束指定编号的进程 ( 既可以结束自己的进程,也可以结束别发进程 )

     > process.arch
    'x64
    > process.platform
     'win32'
    > process.pid
    5108
    > process.kill(5108)
    C:\Users\17308>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4、buffer (缓冲区)
    缓存区:是内存中一块区域,用于临时保存数据
    var buf = Buffer.alloc ( 5,’ ab雅 ’ ) //创建Buffer,分配空间大小为5个字节,每个汉字占3个字节
    buf.toString ( ) //将Duffer格式的数据转为字符串

    //分配一块空间作为Buffer,存储数据
    //alloc 分配 单位是字节
    //每个英文字符占1个字节,汉字占3个字节
    var buf=Buffer.alloc(5,‘abcde’)
    var buff=Buffer.alloc(5,‘abcd刘德华’)
    var buffe=Buffer.alloc(9,‘王心凌’)
    var buffer=Buffer.alloc(6,‘abcd’)

    console.log(buf) // (16进制) ascll码
    //转为字符串
    console.log(buf.toString()) //abcde

    console.log(buff) //
    console.log(buff.toString()) //abcd�

    console.log(buffe) //
    console.log(buffe.toString()) //王心凌

    console.log(buffer) //
    console.log(buffer.toString()) //abcdab

    三、模块

    模块表示一个独立的功能体,Node.s下每一个文件就是一个模块
           require()    用于引入一个模块,模块名称如果是js文件,可以省略后缀名
           module   当前模块的对象
           module.exports = { }    当前模块要暴露对象,默认是一个空对象,如果想让外部使用哪一个,就把其添加到暴露对象中
          __dirname    获取当前模块的绝对路径
          __filename    获取当前模块的绝对路径+模块名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    //引入同一级目录下的05_eye.js
    //同一级目录 . /
    //引入成功后,得到的是暴露对象
    var obj=require(‘./05_eye.js’)
    console.log(obj) //眼睛 { myA: 1, myFn: [Function: fn] }
    //使用暴露对象:用暴露的名字
    console.log(obj.myA,obj.myFn()) //1 [Function: fn]
    =======================================
    //模块作用域
    console.log(‘眼睛’)
    //局部变量
    var a=1
    //局部函数
    function fn(){
    return 2
    }
    //暴露对象:如果想让外部使用哪些,需要暴露出去
    //往暴露对象中添加内容
    module.exports={
    myA:a,
    //把函数fn暴露出去,让外部调用
    myFn:fn
    }
    ————————————————————————————————————
    | 练习:
    | //引用同一级下的06_circle.js
    var obj=require(‘./06_circle.js’)
    console.log(obj) //{ cFn: [Function: fn], cFun: [Function: fun] }
    console.log(obj.cFn(2),obj.cFun(3))
    ======================================
    //创建函数,输入半径得周长
    function fn®{
    //获取 Π 保留两位小数
    return r2Math.PI.toFixed(2)
    }
    //创建函数,输入半径得面积
    function fun®{
    //获取 Π ,保留三位小数
    return rrMath.PI.toFixed(3)
    module.exports={
    cFn:fn,
    cFun:fun
    }

    四、模块的分类

    自定义模块(用户创建的)、核心模块(官方提供的)、第三方模块(别人提供的)
    
    • 1
    以路径开头不以路径开头
    文件模块require( ’ . / circle . js ’ ) 用于引入自定义模块
    目录模块require ( ’ . / 02 _ tao ’ ) 先到目录下查找package . json 文件,main对应的文件,如果没有会自动去查找 index.jsrequire( ’ tao ’ ),如果当前目录下没有,会一直往上一级的node_modules目录寻找,用于引入第三方模块

    //同级目录 ./
    //上一级目录 …/
    //上一级目录 …/…/
    //下一级 ./03_2/文件名称

    //练习:在03_1 . js 中引入同一级目录下的03_2目录模块,包含文件index.js,在文件中创建一个函数
    // 传递任意两个数字返回最大值,将函数暴露出来。在03_1 . js 中调用暴露的函数

    03_1.js中引入03_2目录模块
    var max=require(‘./03_2’)
    console.log(max(3,4))

    index.js文件
    function fn(n,m){
    //return n>m ? n:m
    return Math.max(n,m)
    }
    module.exports=fn

    五、包和npm

    CommonJS :是 一种模块规范,Node.js就是采用了这种规范
    包(package):指第三方模块,需要先下载安装才可以使用
    npm : 是Node.js下,专门下载第三方模块的工具,在安装Node.js时候会附带安装
           npm   -v       查看npm版本号
    npm查找官网:www.npmjs.com
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1、npm命令
    使用npm下载之前,要确保命令行对应的下载目录
    npm init -y : 用于生成package.json文件,作为项目描述文件,可以记录项目所需要的包
    npm install 包的名称 : 要下载安装指定的包,将包下载到当前目录下的node_modules目录,如果不存在会自动创建;
    生成一个package-lock.json,记录所有的包的信息;在package.json文件中记录下载的包

    npm install 自动安装package.json和package-lock.jsn中记录的包

    其他npm命令:www.npmjs.cn(中文版)

    六、网址(URL)

    统一资源定位,互联网上的任何资源 ,都有对应的网址
    
    • 1

    http://www.codeboy.com:9999/products.html?kw=dell
    http://218.247.142.210:9999/products.html?kw=dell
    协议 域名/IP地址 端口 文件的路径 查询字符串
    查询字符串:前端向后端传递参数的一种方式,位于网址中
    kw=dell
    参数名=参数值
    参数名=参数值&参数名=参数值

    new URL() 将一个网址转为对象,可获取网址的各个部分
    searchParams 获取查询字符串部分
    get(‘ 参数 ’) 获取传递的参数值

    //假设后端拿到了前端传递的参数
    // 网址
    var str=‘http://www.codeboy.com:9999/product.html?kw=戴尔&a=1’
    //获取
    //把网址转换为对象
    var obj=new URL(str)
    //console.log(obj)
    //获取查询字符串部分
    var qs=obj.searchParams
    //console.log(qs) //URLSearchParams { ‘kw’ => ‘戴尔’, ‘a’ => ‘1’ } => 表示箭头函数
    //获取两个参数的值
    console.log(qs.get(‘kw’),qs.get(‘a’)) //戴尔 1

    获取网址https:www.tmooc.cn:443/course/web.html?cid=2204&cname=nodejs,打印班级编号,课程名称
    var str=‘https:www.tmooc.cn:443/course/web.html?cid=2204&cname=nodejs’
    var obj=new URL(str)
    var qs=obj.searchParams
    console.log(班级编号:${qs.get('cid')},课程名称:${qs.get('cname')}) //班级编号:2204,课程名称:nodejs

  • 相关阅读:
    程序员脱发怎么办
    Ubuntu2204安装JDK环境
    网络请求urllib库使用总结
    技术人必读!一文读懂数据存储!
    SQL-存储过程、流程控制、游标
    ERROR 之 SpringMVC开发注解版之版本问题
    艾美捷Cy5.5单琥珀酰亚基酯 Cy5.5 NHS酯解决方案
    Springboot中国古代史在线学习网站毕业设计源码260839
    java常用集合之Set
    通过nginx访问另一台服务器上的图片文件
  • 原文地址:https://blog.csdn.net/m0_46170663/article/details/126225046