• nodejs学习笔记---1


    1.初识NodeJs

            什么时候NodeJS

            能做什么

            NodeJS环境搭建和运行

    2.webstorm的使用

            工程创建

            webstorm的NodeJs配置

            NodeJs代码提示

    3.Node和JS的异同

            基本语法

            内置对象

            全局对象

            作用域

    4.模块的使用

            全局作用域

                    global对象

            模块

                    模块概念

                    模块作用域

                    模块对象module

    5.模块加载机制

            模块的加载

                    require()

            模块路径处理

            模块文件查找机制

    6.模块-module和exports

            模块的创建

            module对象

            module.exports对象

            exports对象

    7.global对象

            模块对象

                    __filename

                    __dirname

            全局对象

                    setTimeout

                    setInterval

                    clearTimeout

                    clearInterval

                    Date

    8.process对象

            概念

            属性和方法

                    argv

                    execPath

                    env

                    version

                    versions

                    pid

                    title

                    arch

                    platform

                    cwd()

                    chdir(directory)

                    memoryUsage()

                    exit(code)

                    kill(pid)

    9.process对象-输入输出流

            stdin、stdout:标准输入输出流(IO)

            标准输入设备

            标准输出设备

            process.out.write()

                    输出流

            process.in.resume()

                    恢复输入流

            process.in.on('data')

                    接收输入流数据事件

    10.Buffer-1

            概念

            Buffer类

            new Buffer()

                    创建Buffer对象

            Buffer对象数据的基本操作

                    bf[index] : 获取下标对应数据

                    bf.length : buffer长度

            字符串和字节的区别

    11.Buffer-2

            Buffer对象的一些常用属性和方法

                    write()

                    toString()

                    toJSON()

                    slice()

                    copy()

    12.Buffer-3

            Buffer类的一些常用属性和方法

                    isEncoding()

                    isBuffer()

                    byteLength()

                    concat()

     

    1、初识NodeJs

    javascript是由三部分组成的

    Ecmascript  定义了这门语言的一些基础,语法、数据类型、结构 还有一些常用的对象

    BOM  基于Ecmascript扩展出来的用于页面操作元素的方法

    DOM 基于Ecmascript扩展出来用于操作浏览器的一些方法

    NodeJS也是基于Ecmascript扩展出来的一些操作非浏览器的一些方法,比如操作OS操作系统、file文件系统、database数据库、net网络

    安装及环境配置(windows系统)

    2、编辑器使用webstrom

    可以直接右键run查看

    使用setting配置nodejs的提示 

    3、node和js的区别 

    /*在ecmascript部分,nodejs和js其实是一样的,比如数据类型的定义,语法结构,内置对象
    * 在js中的顶层对象 window
    * 在node中的顶层对象 global
    *   注意:在node中也没用什么window
    *
    * */
    var a=100;
    console.log(a); //100
    
    var d=new Date();
    console.log(d.getFullYear()); //2045
    console.log(d.getMonth()+1); //10
    
    var arr=[1,2,3];
    arr.push(4);
    console.log(arr); //[1,2,3,4]
    
    function Person(name){
        this.name=name;
    }
    Person.prototype.run=function(){
        console.log(this.name+' running')
    }
    
    var p1=new Person('leo');
    p1.run(); //leo running

    4、模块的使用

    在node中定义一个a,使用global不能访问到,是因为a是一个局部变量

    var a=100;
    console.log(global.a); //undefined

    在node中有这样一个规定:

      1. 在node中,文件和模块是一一对应的,也就是一个文件就是一个模块
      2. 每个模块都有自己的作用域 
      3. 我们使用var来申明的一个变量,它并不是全局的,而是属于当前模块作用域下的
    var a=100;
    console.log(a); //100
    global.a=200;
    console.log(a); //100
    console.log(global.a);//200

    说明此时定义的a和global.a是两个变量

    //__filename:当前文件被解析后的绝对路径 
    console.log(__filename); //d:wampwww
    odejs
    ode1.js

    以上可以得出结论:每个文件都有自己的模块,每个模块都有这个的属性

    5、模块加载系统

    定义一个node2.js的文件

    console.log("这是node2.js");

    要想在node1.js里面引用可以用

    require('./node2.js')//这是node2.js

    模块加载机制的两个问题

    1.加载路径

    require('模块加载的路径')

    路径可以写相对路径或者绝对路径

    2.文件查找特点:

      1. 首先按照加载的模块的文件名称进行查找
      2. 如果没有找到,则会在模块文件名称后加上.js的后缀,进行查找
      3. 如果还没有找到,则会在文件名称后加上.json的后缀,进行查找
      4. 如果还没有,则会在文件名称后加上.node的后缀,进行查找
      5. 如果还没有,会抛出错误

    文件名称> .js >.json>.node >错误

    6、模块-module和exports 

    在一个模块中通过var定义的变量,其作用域范围是当前模块,外部不能够直接的访问
    如果我们想在一个模块中能够访问另外一个模块中定义的变量,可以

      1. 把变量作为global对象的一个属性 ,但是这种做法不推荐
      2. 使用模块对象module

    把变量作为global对象的一个属性

    global.a=100;

    使用模块对象module

    module:保存提供和当前模块有关的一些信息,可以通过

    console.log(module)

    来查看都有哪些属性

    在这个module对象,又一个子对象,exports 对象,我们可以通过这个对象把一个模块中的局部变量对象进行提供访问

    在node5.js中写入

    var a=100;
    module.exports.a=a;

    在node4.js中引入

    var m5=require('./node5');//这个方法的返回值,其实就是被加载模块中的module.export
    console.log(m5);//{ a: 100 }

    在模块作用域内,除了module.exports还有一个内置模块对象,exports, 他其实就是module.exports

    console.log(module.exports==exports)//true

    返回值是true

    所以也可以写为

    exports.a=a;

    输入结果一样

    定义的一些细节尽量不去破坏它们的引用关系,

    module.exports=[1,2,3]//如果不是赋值,而是重新定义,exports和module.exports的指向关系已经断开了
    exports=[1,2,3]//这种定义也会断开

    7.global全局对象

    可以对照中文文档学习

    __filename    和 __dirname不是全局的,而是模块本地的

    也就是说要如下写法输出

    console.log(__dirname);
    console.log(__filename);

    而不能加global.__filename 

    除了这两个ecmascript所规定的基本数据类型都是全局的如:数组array,日期date

    var d=new Date();
    var arr=[1,2,3]

    8、process进程对象

    包含很多参数

    process.argv 包含命令行参数的数组。第一个元素是'node',第二个参数是 JavaScript 文件的名字,第三个参数是任意的命令行参数。

    console.log(process.argv); //[ 'C:\Program Files\nodejs\node.exe','d:\wamp\www\nodejs\node6.js' ]

    process.execPath  开启当前进程的执行文件的绝对路径。

    process.env 返回用户环境信息

    process.version 返回node版本信息

    process.versions 返回node及其依赖包的版本信息

    process.pid 当前进程的 PID  任务管理器里面的详细信息pid

    process.title 当前进程的显示名称 (Getter/setter) 获取/设置

    process.arch 返回当前 CPU 的架构:'arm'、'ia32' 或者 'x64'

    process.platform 返回当前操作系统平台

    process.cwd() 返回当前进程的工作目录

    process.chdir(directory) 改变当前进程的工作目录

    process.kill(pid)向进程发出信息

    exit(code) 退出

    setInterval(function(){
        var d=new Date();
       console.log('现在的日期是:'+ d.getFullYear()+'年'+ (d.getMonth()+1)+'月'+ d.getDay()+'日 '+ d.getHours()+':'+ d.getMinutes()+':'+ d.getSeconds())
    
    },1000)
    
    setTimeout(function(){
        process.exit()
    },5000)

    process.memoryUsage() 返回 Node 进程的内存使用情况,单位为byte

    还有很多方法具体查看文档

    9、stdin、stdout 标准输入输出流(IO)

     ---- 标准输入设备

     ---- 标准输出设备

     ---- stdin和stdout提供了操作输入数据和输出数据的方法,我们也通常称为IO操作

    stdin 标准输入流

    stdout 标准输出流

    process.stdout.write('hello');
    function Log(data){
        process.stdout.write(data);
    }
    Log('你好')
    默认情况下输入流是关闭的 ,要监听处理输入流数据,首先要先开启
    //默认情况下输入流是关闭的 ,要监听处理输入流数据,首先要先开启
    process.stdin.resume();
    //用于监听用户的输入数据
    process.stdin.on('data',function(chunk){
    console.log('用户输入了'+chunk);//用户回车了才会触发
    });

    案例:计算加减乘数

    var a,b;
    process.stdout.write('请输入a的值:');
    process.stdin.on('data',function(chunk){
        //判断如果a不存在执行
        if(!a){
            a=Number(chunk);
            process.stdout.write('请输入b的值:');
        }
        else{
            b=Number(chunk);
            process.stdout.write('结果是:'+(a+b));
        }
    });

     10.Buffer类

      • 一个用于更好的操作二进制数据的类
      • 我们在操作文件或者网络数据的时候,其实操作的就是二进制数据流,node为我们提供了一个更加方便的去操作,这种数据流的类Buffer,它是一个全局的类
      • 三种构造方式 
        • new Buffer(size) 分配一个长度

        • new Buffer(array)

        • new Buffer(str[, encoding])

    //new Buffer(size) size [number] 创建一个Buffer对象,并为这个对象分配一个大小
    var bf=new Buffer(5);//5个长度的大小 当我们为一个Buffer对象分配空间大小以后,其长度是固定的,不能更改
    console.log(bf);//<Buffer 00 00 00 00 80>
    bf[1]=20;
    console.log(bf);//<Buffer 00 14 00 00 80>   显示的是十六进制
    var bf=new Buffer([1,2,3,4]);
    console.log(bf);//<Buffer 01 02 03 04>
    bf[10]=10;//增加内容
    console.log(bf);//<Buffer 01 02 03 04> 其长度是固定的,不能更改
    var bf=new Buffer('miaov','utf-8');
    console.log(bf);//<Buffer 6d 69 61 6f 76> 把字符串转化编码
    var bf=new Buffer('miaov','utf-8');
    console.log(bf);//<Buffer 6d 69 61 6f 76> 把字符串转化编码
    //检测字符串 bf.length 当前内容的字节长度并不是字符串的长度
    for(var i=0;i<bf.length;i++){
           console.log(String.fromCharCode(bf[i]));
       /* m
        i
        a
        o
        v
        */
    
    }
    
    //比较字节和字符串长度
    var str1='miaov';
    var bf1=new Buffer(str1);
    console.log(str1.length); //5
    console.log(bf1.length); //5
    
    var str2='苗圩';
    var bf2=new Buffer(str2);
    console.log(str2.length);//2
    console.log(bf2.length);//6

    buf.length   返回这个 buffer 的 bytes 数

    buf[index]  获取或设置指定 index 位置的 8 位字节

    buf.write(string[, offset][, length][, encoding]) 根据参数 offset 偏移量和指定的 encoding 编码方式,将参数 string 数据写入buffer。

  • 相关阅读:
    编写PHP规则
    phpmyadmin修改mysql数据库密码
    响应式设计:流式布局
    响应式设计:媒体查询
    html5、css3及响应式设计入门
    HTML5学习笔记五:html5表单
    HTML5学习笔记四:html5结构
    HTML5学习笔记三:aside元素,time元素与微格式
    css基础知识1——css基础语法、css选择器、css继承和层叠
    HTML基础知识5——<div>和<span>标签
  • 原文地址:https://www.cnblogs.com/eveblog/p/4861674.html
Copyright © 2020-2023  润新知