nodejsDay

1. 什么是NodeJs?
  NodeJs不是一门编程语言,是一个javascript的运行环境,NodeJs是采用C++语言编写而成的一个javascript的解释器

2.什么是运行环境?

  通俗讲指一种语言想要实现相关的功能需要另外一种事物(可以使语言也可以是其他的东西)作为它的载体或这运行平台

     在客户端,javascript想要实现某种功能是需要浏览器提供支持,如果没有浏览器提供支持是完成不了的
     操作系统的运行环境,就是电脑硬件本身,如果连电脑都没有,那么操作系统无法运行

3. 为什么NodeJs是javascript的运行环境?

  因为NodeJs采用的是Google Chrome浏览器的V8引擎,而V8引擎就是Javascript的运行环境

  但是NodeJs是服务器端的运行环境

4. 服务器端语言有什么特点呢?
  4.1 进行http通信 接受http请求,响应http请求
  4.2 操作数据库 对数据库里面的内容可以进行增删改查
  4.3 可以操作本地文件,对本地文件进行读写,创建和删除等

5. NodeJs 有什么特点?

  5.1 以上4的特点都有
  5.2 是javascript的运行环境
  5.3 事件驱动
  5.4 非阻塞I/O
  5.5 单线程

6. 什么是事件驱动?
  事件:在客户端js中有 点击按钮事件/鼠标事件/键盘事件等都叫做事件
  事件驱动:有鼠标或者键盘引起一连串的操作动作叫做事件驱动
  简单理解:通常事件驱动会伴随着相对应的程序处理或者函数的执行

7. Nodejs的有哪些事件驱动?

  7.1 接受客户端的请求
  7.2 对文件进行读写
  7.3 操作数据库

8. 什么是非阻塞I/O
  I/O : input/output 输入输出

  通俗来讲
  对于磁盘 I/O = 读写
  对于网络 I/O = 收发请求

阻塞I/O
指在执行I/O的过程时候,会阻塞其他应用程序的进行,只有等待这个I/O完成后,才会进行其他的操作

非阻塞I/O
指在执行I/O的过程时候,不会等待其应用程序执行完成后在执行其他应用程序,当I/O结束后,在回头处理这个结果。 即异步

9. 单线程

  单线程:程序按照逻辑顺序执行,前面的必须处理完成,后面的才会执行,即在同一个时间里面只能做一件事情
    如:你在点击按钮出现弹窗的时候,就不可以对浏览器做出其他的相应操作

  多线程:程序在一个时间里面可以做多个事情 能够提高效率
    如 :迅雷同时下载多个小电影

  javascript 是一门单线程语言,为什么javascript不能是多线程?

      javascript作为单线程,由其内容所决定,在浏览器环境中,JavaScript的主要用操作DOM
    如果JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这个时候没法搞?

10. 问题来了,既然javascript是单线程,那么为什么nodejs会有非阻塞I/O?

  I/O操作都是比较耗时的,这个会阻塞其他的任务进行,javascript的设计者认为,没有必要等待I/O的完成,
  在I/O任务完成之前javascript完全可以继续执行其他的任务,直到I/O任务完成后再回头执行该任务的返回就行。
  所以javascript在设计之初中将这些耗时的I/O等操作封装为了异步的方法,等到这些任务完成后就将后续的处理操作封装为JavaScript任务放入执行任务队列中,等待JavaScript线程空闲的时候被执行

11.Nodejs端的javascript和浏览器端的javascript的相同点和不同点
  相同点:

    基本语法、数据类型相同

      声明变量、函数
      数值、字符串、对象、数组、函数、布尔、undefined
      不同的数据类型的属性和方法

  不同点:

    全局对象不同

      在浏览器端 # window
      在NodeJs # global

       因为js的运行环境不同,所以两者的全局对象下的属性和方法基本上都是不同的 (即window下的属性和方法在nodejs中没有,global中的属性和方法在浏览器端也是没有的)

12.NodeJs采用大量的es6简写方法,其中以箭头函数居多,箭头函数的简写有以下几种
  1. 一般函数的写法函数
    var fn1 = function(a,b,c){
    ......代码块......
    console.log("fn1");
    }

    简写形式如下:

    var fn1 = (a,b,c)=>{
    ......代码块......
    console.log("fn1");
    }

  2. 当函数只有一个参数的时候
    var fn2 = function(a){
    ......代码块......
    console.log("fn1");
    }

    简写形式如下:

    var fn2 = a =>{
    ......代码块......
    console.log("fn1");
    }

  3. 当函数体只有一条语句,且为 return 语句

    var fn3 = function(a,b)=>{
    return a+b;
    }

    简写形式如下:

    var fn3 = (a,b)=>a+b;

13.Module(模块)

      一般情况下一个模块代表是一个功能的集合,能够完成某个特定的功能,模块一般为对象或者是一个函数

  在nodejs中模块分为系统模块和自定义模块

    系统模块

       也叫内置模块,nodejs这个运行环境自己提供,不需要另外下载和安装

    自定义模块

        需要自己定义封装,然后引入才能够使用

    nodejs中有大量的模块为什么不把这些模块融合在一起?

       有一些程序只需要使用某些模块(如文件读取功能)来完成一个特定的事情,所以为了效率,完全没有必要引入其他的模块,你用啥,你就require啥。

14.NodeJs 内置模块 HTTP

  1. 服务器的创建 03.js

     如果想修改程序,必须中断当前运行的服务器,重新node一次,刷新,才行。
     ctrl+c,就可以打断挂起的服务器程序。此时按上箭头,能够快速调用最近的node命令。

  2. 思考,那么我们写的网页如何通过服务器被访问得到?

    1. 总不能通过在js中不断的创建节点,添加节点来完成吧,需要结合fs模块来完成

  3.如何通过访问nodejs服务器访问的是一个完整的html页面
    通过引入fs模块来对html文件进行读取,然后把读取到的数据输出到html当中
    见案例04.js

  4. 回调函数参数req的讲解
    req.method 请求方式
    req.url 请求的路径
    req.header 请求头

  5.nodejs没有存储文件的web容器
    nodejs不像传统的老牌服务器apache不能提供一个静态的web容器 一个url路径不代表有一个资源库

  6. html中每一个img script 和link标签都会发起请求 都有路由路径

  7. html中引入css和javascript

     注意在html骨架中引入的css和javascropt可以不设置header头,建议加上

    注意!!!!!!!
    案例中使用的大量的相对路径 是相对于cmd命令命板中光标挂起的所在的文件夹,不是相对于 *.js 文件

    eg: node C:\课件2\Server_13\NodeJs_01 这是错误的,会发现找不到文件

15.http 模块其他api

  res.setHeader("name","value"); 设置请求头

  res.statusCode 设置状态码

     状态码为三位(否则报错),可以随便设置 ,但是一般情况下设置想对应的状态码

  res.statusMessage 设置状态信息

  res.write() 发送给浏览器的网页内容

    注意:所有的write和end里面的参数必须为字符串或者buffer类

时间: 2024-10-15 04:00:09

nodejsDay的相关文章