zoukankan      html  css  js  c++  java
  • nodejs=>day_1

    ---恢复内容开始---

    一、环境搭建与简介             

    安装node.js环境:

    方式一:nvm安装

    方式二:直接安装

     

    具体步骤见Node.JS windows环境配置

    二、简介  

    Node.js是一个平台,可以让JavaScript运行在非浏览器环境。

    特点:

    1、单线程,

    Node.js是就是同一时刻只能执行一个任务,有多个任务就要排队。

    和单线程对应的多线程,同一时刻可以执行多个任务。

    2、非阻塞I/O,

    I/O操作就是访问文件,网络,数据库等耗费时间的操作。传统的单线程是阻塞I/O,必须等待操作执行完毕,才能继续执行后面的操作。

    非阻塞I/O,I/O操作不会被等待。而是直接执行后面的操作。

     

          之所以Node.js能够实现非阻塞I/O,是因为Node上层虽然运行的是JavaScript,是单线程的,但是,Node.js的底层是可以开辟多线程的C/C++。因此,当Js线程遇到I/O操作时,就会将任务交给底层的C/C++去做。

           虽然C/C++可以开辟多线程,但是计算机是不允许无线开辟线程的,毕竟内存大小有限。它们会在内部维护一个线程池,里面有固定数量的线程。线程会重复利用。只有当线程的数量不能满足需求时,才会重新开辟。

     

    3、事件驱动

    底层代码完成任务之后,会通过“事件”通知JavaScript线程,JavaScript就会执行回调函数。以便完成后续的操作。

     

    Node.js内部任务原理图:

     

    虽然I/O操作,会交给底层的C/C++执行,但是和计算相关的代码,JavaScript还是会亲自执行。因此,大量的计算仍然可能导致JavaScript线程阻塞

     

    Node.js适合做I/O密集型操作。如网站服务器实时通信

    不适合做CPU密集型(计算量大)操作。如图像,视频处理,深度学习等。

     

    三、全局变量  

     

          JavaScript的全局对象是Global,它不能直接使用。

          它在不同的平台有不同的代理者:

          浏览器:window

          Node.js:global

     

    window和global的区别:

     

    1. 在浏览器中,如果全局变量或函数不属于任何一个对象,那么就属于window
    2. 在Node.js中,var声明的变量不会属于global对象,不用var声明的全局变量属于global对象的。全局函数也不属于global对象
    3. Node函数中的this仍然指向的是调用者。如果一个函数没有明确的调用者,就用global调用。全局范围内的this指向的是{}对象。

     

     

    global对象的一些方法和对象:

     

    global.console

    global.setInterval();

    global.setTimeout();

    global.clearInterval();

    global.clearTimeout();

    它们在使用时,可以省略global.

     

    除了global对象的属性/对象可以直接使用以外,还有两种直接使用的全局对象

     

    1. JavaScript语言自带的全局对象

    如Math,Date…

    1. Node.js平台提供的全局对象。

    module, __dirname,__filename,require();

     

     

    四、events模块

     

    该模块是Node.js的核心模块,只有一种对象:

       

    EventEmitter

     

    引入模块:

    var events = require(“events”);

    创建对象:

        var emitter = new events.EventEmiter()

     

    设置监听:

        emitter.addListener(), on(),  once()

    移除监听:

        emitter.removeListener(Event,callback);

        emitter.removeAllListeners(Event);

    发射事件:

        emitter.emit(event,arg1,arg2…argN);

     

    开发中,该模块不会被直接使用,通常是其它模块通过原型链继承EventEmitter对象的功能。

     

    五、http模块搭建服务器

    http.createServrer(callback)方法用于创建服务器对象。传入一个回调函数,该函数会在客户端发起http请求时触发。

    callback:

    function(request,response){

    }

    response

    该参数是server.Response的实例。

    这个对象可以用于向客户端发送响应。

     

    res.writeHeader();  写入响应头信息

    res.write();              写入响应体信息。

    res.end()                结束本次请求

     

    响应的内容中如果有中文,可能会导致乱码问题。

    我们应该在请求头中告诉浏览器应该用什么格式去解析数据。

     

    Buffer对象:

     

    JavaScript擅长处理的是字符串,但是对于需要占据大空间的文件的处理,用字符串是不行的。

     

    Buffer是Node从C++引进来的一种保存大容量数据的对象。因为Buffer对象的空间不会计算在Node程序中,因此可以用来存放大容量数据,如视频,音频,文件等。

     

    单个Buffer在Node中最大空间不超过:2147483647字节(32位最大整形数)。

     

    在处理可能会占据大空间的操作时,Node默认会把数据存放在Buffer中。

     

    request

    该参数是IncomingMessage对象的实例,

    这个对象包含了本次请求的所有信息。我们可以从该对象中取出有用的部分,来决定应该如何响应此次请求。

     

    url模块

          用来处理url字符串

     

    fs模块

        用于操作文件

     

    mime模块

      用于给文件设置mime类型

    ---恢复内容结束---

    你好!如果你有什么更好的建议或意见,请在评论区留言。感谢你的阅读!
  • 相关阅读:
    jsp大文件(视频)上传问题
    python多版本的pip共存问题解决办法
    buntu系统安装rpm包的方法
    如何查看linux是32位还是64位
    python的if else
    python获取列表唯一值
    python列表转数组
    python文件操作write与writelines的区别
    python中字符串str的strip()方法
    ubuntu16.04安装cloudcompare及打开方法
  • 原文地址:https://www.cnblogs.com/YCxiaoyang/p/7507519.html
Copyright © 2011-2022 走看看