node.js基础(一)

232 阅读3分钟

什么是Node.js?

  1. Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境

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

    • Node.js功能
      • 事件驱动
      • 非阻塞I/O模型【 异步的输入输出,比如: 文件操作、数据库操作 等

Node.js版本

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

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

  3. LTS(Long Term Support)

  4. LTS和Current区别

    • LTS是正式版本

    • Current是测试版本

Node.js的模块化问题

  1. Node.js采用了Common.js模块化

  2. 应用

    • 内置模块 -> 可以直接使用
    • 第三方模块 -> Node.js没有的 类似于插件
    • 自定义模块
  3. 模块化解决的是什么问题?

    • js中可以引用其他类型文件

Node的安装

  • 安装包安装
    • 官网下载对应的安装包
    • 一路next
  • nvm安装(有一个类似的工具:n)
    • Node Version Manager(Node版本管理工具)
    • 由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理
    • npm i require -D

Windows下常用的命令行操作

  • 切换当前目录(change directory):cd
  • 创建目录(make directory):mkdir
  • 查看当前目录列表(directory):dir
    • 别名:ls(list)
  • 清空当前控制台:cls
    • 别名:clear
  • 删除文件:del
    • 别名:rm -rf 文件目录名称

注意:所有别名必须在新版本的 PowerShell (linux系统)中使用

常见问题

  • Node中有些第三方的包是以C/C++源码的方式发布的,需要安装后编译
  • 环境变量丢失
  • 部分电脑安装完毕之后没有环境变量需要手动配置
  • Windows中环境变量分为系统变量和用户变量
  • 环境变量的变量名是不区分大小写的
  • PATH 变量:只要添加到 PATH 变量中的路径,都可以在任何目录下
  • 目的可以在任何地方调起node命令

内置模块

  • fs

    • fs.mkdir:创建文件夹

      创建名为data的文件夹

      fs.mkdir('data',(err)=>{
      if(err){
          console.log('创建失败了');
      }else{
          console.log('创建成功了');
          }
      });
      
      
  • http

    • http.createServer:创建一个能够处理和响应 http 响应的服务
    http.createServer((req,res)=>{
        res.writeHead(200,{
            'Content-type':'text/html;charset=utf-8'
        });
        res.write('<a href="#">baidu</a>');//服务器输出对应的信息
        res.write('<strong>baidu</strong>');//服务器输出对应的信息
        res.end('中文');//响应结束,输出括号里面的内容
    }).listen('8000','10.31.161.200');8000->端口 10.31.161.200->IP地址
    
  • url:用于URL解析

    • search:网址的“?”部分,包括开头的问号。
    • hash:网址的“#”部分,包括#号。
    • query:查询“?”后面的字符串并解析字符串形成对象
    • url.parse():将一个URL字符串转换成对象并返回
        const newObj = qs.parse(url.parse( str ).query,'&','=')
    
  • querystring:处理url查找字符串

      1. querystring.parse string -> object
      1. querystring.stringify object -> string
      1. querystring.escape 中文转码
      1. querystring.unescape 中文解码

      附:深拷贝

        JSON.parse(JSON.stringify( state ))
      
  • event

    • 1.archetype.on(事件名称,事件处理函数) ====>发布

    • 2.archetype.emit(事件名称,实参) =====>订阅

    archetype.on('handler',( val ) => {
        console.log('事件触发了', val )
    })
    archetype.emit( 'handler',100 )
    

第三方模块

  • request :简化的http请求,默认get请求,支持https

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  console.log('error:', error); // 错误信息
  console.log('statusCode:', response && response.statusCode); // 响应
  console.log('body:', body); // 数据
});
  • readline:

const rl = readline.createInterface({ // 创建了一个可以输入输出的接口
 input: process.stdin,
 output: process.stdout
});

rl.question('请输入您想说的话:', (answer) => {
 if ( answer == '88' ) {
   rl.close()
 } else {}
});
  • http-errors :用来记录错误信息

  • express :express的顶级库,提供了很多expres api

  • cookie-parser :处理cookie

  • morgan :记录日志信息

  • path:找到文件对应的磁盘位置(绝对路径)

自定义模块

自定义模块上传实现步骤

  1. 创建文件夹,注意命名不要冲突

  2. 创建package.json文件

    • npm init / npm init -y
  3. 创建了 index.js, 里面封装任意一个功能

  4. 创建一个 npm.js 账号

  5. 保证我们当前的源是 npm 源

    • nrm use npm
  6. 登录账号

    • npm adduser
  7. 上传

    • npm publish