Node的安装及环境配置

  1. 什么叫node.js?

    • node.js是一个基于Chrome V8引擎的js运行环境。

    • node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。

      • 事件驱动:任务驱动,发布者,订阅者,事件驱动(例如点击事件)。

      • 非阻塞: 执行某一个任务的同时也可以执行其他任务

      • 阻塞: 执行某一个任务,这个任务如果没有执行完成,其他任务必须等待

  2. npm: Node.js的包管理工具,是全球最大的开源库生态系统.

  3. nrm(npm registry manager ): 是npm的镜像源管理工具,有时候国外资源太慢,那么我们可以用这个来切换镜像源。

    • 首先全局安装 nrm npm install -g nrm

    • 列出可用的源:nrm ls

    • 使用哪个源:nrm use taobao

    4.nvm: 是一个可以让你在同一台机器上安装和切换不同版本node的工具,nvm 的官方版本只支持Linux 和 Mac。

    5.nodemon : 是一款非常实用的工具,用来监控你 node.js 源代码的任何变化和自动重启你的 服务器。安装 命令: npm install -g nodemon。

 6.node版本常识

  • 偶数版本为稳定版 (0.6.x ,0.8.x ,0.10.x)

  • 奇数版本为非稳定版(0.7.x ,0.9.x ,0.11.x)

  • LTS(Long Term Support ): 稳定版

  • Current :最新版本的(不建议安装最新版本的) 

Windows下常用的命令行操作

  • DOS命令

    • cmd终端唤醒: win键 + R , 输入cmd 回车

    • mkdir 创建目录

    • dir 列出当前目录的列表

    • cls 清空终端命令

    • del 删除某一个文件

  • git命令(注意:两种类型的命令中, cd是一个意思)

    • mkdir 创建目录

    • ls 查看当前目录列表

    • clear 清空当前控制台

    • rm -rf 文件名称 删除某一个文件或是目录

commonjs规范

  • Node 应用由模块组成,采用 CommonJS 模块规范。

  • CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

模块的分类

  • 内置模块

    • querystring

      const qs = require('querystring');
      var str = 'http://www.baidu.com/home?a=1&b=2#c=3';
      console.log(qs.parse(str));//{ 'http://www.baidu.com/home?a': '1', b: '2#c=3' }
      //parse : 将字符串转为对象(以&为界分)
      //stringify: 将对象转为字符串 【 编码 】
      // escape  将中文进行编码
      // unescape 将中文解码
      var obj = {
          'http://www.baidu.com/home?a': 1,
          b: '2#c=3'
      }
      console.log(qs.stringify(obj));//http%3A%2F%2Fwww.baidu.com%2Fhome%3Fa=1&b=2%23c%3D3
      ​
      var str1 = 'bj北京';
      console.log(qs.escape(str1));//bj%E5%8C%97%E4%BA%AC
      ​
      var str2 = 'bj%E5%8C%97%E4%BA%AC';
      console.log(qs.unescape(str2));//bj北京
    • http

      • http.createServer() 使用node 创建一个服务器

        const http = require( 'http' )
        const host = 'localhost'  
        const port = 8000 ;//自己随意设置的端口号
        ​
        http.createServer(( request,response ) => {
        ​
          // response.writeHead( 状态码,请求头 )
          response.writeHead( 200, {
            'Content-type': 'text/html;charset=utf8'
          });
          response.write('<h3> 这里使用Node创建的一个静态服务器 </h3>') // 往前端发送信息
          response.end() // 告诉前端信息已经结束了
        ​
        }).listen( port,host,() => {
          console.log( `The server is running at: http://${ host }:${ port }` )
        })
         
        • http.get 进行数据请求

          const http = require('http')
          http.get('http://api.k780.com/?app=weather.city&cou=1&appkey=43880&sign=6a31f4fe1408d69bb0417b046eeae5b6&format=json', (res) => {
              const { statusCode } = res; // 获取请求状态码 200 301 302 303 304 404...
              const contentType = res.headers['content-type']; // 获取请求类型数据类型
              res.setEncoding('utf8'); // 字符编码
              let rawData = '';
              res.on('data', (chunk) => { rawData += chunk; }); //通过data事件拼接数据流
              res.on('end', () => { // 获取数据结束了 
                  try { // 高级编程语法捕获错误信息
                      console.log(rawData);
                  } catch (e) {
                      console.error(e.message);
                  }
              });
          });

           

           

           

    • url

      •  
        const url = require('url');
        ​
        const urlpath = 'http://api.k780.com/?app=weather.future&weaid=hangzhou&&appkey=43633&sign=3050bb4c62ee490c994d41b450b65ba1&format=json';
        //console.log(url.parse(urlpath));//结果是个对象,包含url的所有属性
        //console.log(url.parse(urlpath).query);//app=weather.future&weaid=hangzhou&&appkey=43633&sign=3050bb4c62ee490c994d41b450b65ba1&format=json
        //console.log(url.parse(urlpath).search);//?app=weather.future&weaid=hangzhou&&appkey=43633&sign=3050bb4c62ee490c994d41b450b65ba1&format=json
        ​
        console.log(url.parse(urlpath, true).query);
            //[Object: null prototype] {
            // app: 'weather.future',
            // weaid: 'hangzhou',
            // appkey: '43633',
            // sign: '3050bb4c62ee490c994d41b450b65ba1',
            // format: 'json' }
            
        //console.log(url.parse(urlpath, true).query.app);//weather.future

         

         
    • fs

      • 读取文件

        /* 
          Node.js读取文件都是二进制流 
            Buffer 
            binary
        */
        const fs = require('fs')
        fs.readFile('./yyb.txt', 'utf8', (error, docs) => {
          console.log(docs.toString())//获取yyb.txt文件的内容
        })
         
        • 文件和目录的信息

      const fs = require('fs');
      //得到文件与目录信息: stat
      fs.stat('url.js', (err, stats) => {
          if (err) {
              console.log(err);
          } else {
              console.log(stats);//信息
              console.log(`文件:${stats.isFile()}`);//是否是文件(true/false)
              console.log(`目录:${stats.isDirectory()}`);//是否是目录(true/false)
          }
      });
      ​
      // 创建一个目录:mkdir
       fs.mkdir('file', (err) => {
         if (err) {
             console.log(err);
         } else {
              console.log('目录创建成功');//信息
          }
      });

       



  • 第三方模块

    //request这个模块是做数据请求
    request = require('request');
    request('https://m.lagou.com/listmore.json?pageno=1&pagesize=20', function (error, response, body) {
        console.log('error:', error);
        console.log('statusCode:', response && response.statusCode);//200
        console.log('body:', body);//接口内容
    });
     
  • 自定义模块

    • 定义模块和暴露模块

    var person = {
        name: 'zhangsan',
        age: 20,
        sex: '男'
    }//定义模块
    // module.exports = person;//这种方法只能导出一个
    module.exports = {//更安全,还可以批量导出
        person
    }//暴露接口(以上两种方法)
     
    • 引用模块

    const { person } = require('./3.moduleexports');
    console.log(person.name);
    
    
posted on 2019-07-10 22:11  xiaixa  阅读(115)  评论(0编辑  收藏  举报