美文网首页
新手学习nodejs总结-01

新手学习nodejs总结-01

作者: 老王brave | 来源:发表于2018-12-01 15:19 被阅读0次

    什么是nodejs

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

    tips:nodejs不是一个框架,也不是一门编程语言。

    nodejs的作用

    • nodejs一般用于服务器开发。解决和创建高性能的网络应用程序,这里就不得不提到nodejs的几个特点了。
      • 事件驱动
        • 简单的来说就是有事情触发在执行,如果你学习过java,那么你或多或少会知道观察者模式,nodejs就相当于观察者模式。
          由于JavaScript是单线程的,利用事件轮询、任务队列的异步操作来执行。生动的说就像有一个死循环,当有事物触发循环中的某个条件时,再执行该条件对应的逻辑。
      • 非阻塞 IO(异步) 模型
        • 了解JavaScript就一定知道异步操作,回调函数这是JavaScript语言的一种特性。tips:es6 promise链式编程者的福音。
      • 单线程
        • 这个没得说JavaScript本生就是单线程。
      • 跨平台
        • 只要有node环境就能运行node程序了。
    • 命令行工具
    • 爬虫
    • ......

    nodejs的发展历史

    • node之父是Ryan Dahl

      tips: 现在去搞go

      • 2009年,Ryan Dahl发布了最初的 Node 版本
      • 2010年,Ryan Dahl 全职负责 Node 的发展
      • 2011年,Node 在微软的支持下发布了 Windows 版
      • 2012年,Ryan Dahl 将node转交给了 Isaac Z.Schlueter
      • 2015年,Node 与 io.js 合并,Node 的版本从 0.12.7 升级到了 4.0.0
        • 合并后的 io.js 和 Node 在 Joyent 公司的维护下并行了两个版本:
        • 一个是4.x.x 还是原来的 Node,这个版本是稳定版
        • 一个是5.x.x,目前已经更新到了 6.8.1,其实就是 io.js,最新特性版,不建议生产环境使用
        • Node 计划在 2016 年 10月底正式发布 Node 7.0
      • 7.0 已经最大限度的支持了很多的 ES6 新语法
      • 而且提高了整体的执行性能,提供了一些别的API

      tips:要学就用最新版本

    安装node环境

    下载地址为https://nodejs.org/en/download/

    • 下载后一直点下一步,下一步就能安装成功
      • 安装成功后打开命令行输入node --version,能显示相应的版本表示安装成功。

    这时候我们可以试试nodejs的作用,你可以直接在命令行输入node,这就相当于一个编写页一样,你可以试着写console.log('hello'),回车控制台输出 hello。

    • 其实node不仅可以跟命令还可以接js文件执行

      • 你可以将代码写到文件中,node hello.js也是同样的效果,前提是你当前路径必须包含此文件,不然报错
    • common.js

      • nodejs是采用了commonJS规范的。
        • 为什么会有这个规范呢,因为JavaScript天生就不支持模块化。还没有块级作用域。

      本java程序员表示非常不解。
      * 所以浏览器的JavaScript和node中的JavaScript不是一样的。
      + nodejs的模块化
      * nodejs中使用require关键字来加载模块,使用exports来导出模块。
      * nodejs中内置了一些核心模块,我们可以使用fs这个读写文件的模块来简单了解nodejs。

    //引入fs模块
    var fs = require('fs');
    
    //假设我要读取一个名字问hello.txt的文件
    fs.readFile('./hello.txt',function (err, data) {
        //如果读取失败
        if (err) {
            console.log('读取文件失败!');
            return;
        }
    
        console.log(data);
    })
    
    

    这是一个简单的异步的读取文件
    其实fs模块还有写文件等功能,这里就不一一说明。

    • 我们可以了解到var fs = require('fs');可以引入一个核心模块,它也可以引入一个第三方模块,还可以引入自己写的模块。
      • 假设我有个模块叫hello.js那么它就是这样。
          //后缀的.js可以省略,也可以不省,随你的性子来,但是99%人都省了所以....
          var hello = require('./hello');
      
      • 加载的时候会执行hello.js内的所有代码。但是如果hello.js中没有exports的话那这个hello就是空的。
    • nodejs中的模块导出。
      • 你可以这样写hello.js来返回内容
          exports.say = function () {
                  console.log('hello');
              }
      
      
      • 那么调用这个模块的人就可以这样用
          var hello = require('./hello');
      
          hello.say();
      
      
      • 这是导出一个say,当然你也可以导出任何js支持的数据格式
      • 但是这不是单个成员的时候
          var num = 1;
      
          exports.num = num;
      
          exports.fun = function () {
              
          }
          //........
      

    exports我们不导出单个成员时能这么写,导出单个成员就不能这么写了。

    • exports的导出原理
      • 其实可以这样理解
      • 很简单我相信你一看代码就懂了
    //相当于每个模块最前方有这几句代码
    var module = {
        exports:{}
    }
    // 模块中同时还有一个成员 exports 等价于 module.exports
    var exports = module.exports;
    /**
     *  你写的代码其实都在这里,懂了吗?
     *  其实实际返回的是module.exports。exports只是module.exports的简写。
     *  当exports=时引用地址变了,而module.exports的引用地址没有改变。
     *  实际返回的是module.exports
     **/
    
    return module.exports;
    
    
    + 所以要返回单个成员必须这样
    ```javascript
        module.exports = xx;
    ```
    

    ok,今天就写到这。

    相关文章

      网友评论

          本文标题:新手学习nodejs总结-01

          本文链接:https://www.haomeiwen.com/subject/hvqrcqtx.html