• Node.js 基础介绍


    windows系统中配置环境变量问题:

    windows系统中需要配置环境变量,环境变量其实指的是一个个的路径。当我们在命令行窗口打开一个文件,或调用一个程序时,如果找到了则直接打开,如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止,如果没找到则报错。因此我们可以将一些经常需要访问的程序和文件的路径添加到path中,这样就可以在任意为止访问这些文件和程序。

    进程和线程

    进程

    • 进程负责为程序的运行提供必备的环境
    • 进程相当于工厂中的车间

    线程

    • 线程计算机中的最小的额计算单位,线程负责执行进程中的程序
    • 线程就相当于工厂中的工人

    单线程

    • JS,Node是单线程
    • Node的服务器是单线程的,但是在后台拥有一个 I/O 线程池

    多线程

    • 传统的服务器都是多线程的,每进来一个请求,就创建一个线程去处理请求
    Node.js简介
    • Node.js能够在服务器端运行JS
    • Nod采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能
    • Node大部分基本模块都使用JavaScript编写
    Node的用途
    • Web服务API,比如REST
    • 实时多人游戏
    • 后端的Web服务,例如跨域,服务器端的请求
    • 基于Web的应用
    • 多客户端的通信,如即时通信

    在node中有一个全局对象 global , 他的作用和网页中 window 类似,

    在全局中创建的变量都会作为 global 的属性保存

    在全局中创建的函数都会作为 global 的方法保存

    当node 在执行模块中的代码时,它会将代码包装载下面的函数中执行,并且在函数执行时,同时传递进了5个实参。(遵循CommonJS的规范)

    function (exports,require,module,__filename,__dirname) {
        
    }
    
    exports
    • 该对象用来将变量或函数暴露到外部
    require
    • 函数,用来引入外部的模块
    module
    • module代表的是当前模块本身

    • exports就是module的属性

    • module.exports == exports

    __filename
    • 当前模块的完整路径
    __dirname
    • 当前模块所在文件夹的完整路径

    这五个属性都是可以直接用的

    exports 和 module.exports
    • 通过exports 只能使用 . 的方式向外暴露内部变量
      • exports.xxx = xxx
    • 而module.exports既可以通过 . 的形式,也可以直接赋值
      • module.exports.xxx = xxx
      • module.exports = { }
    node 诞生的初衷

    node诞生的初衷是为了解决 I/O 阻塞的问题。因为传统的服务器都是多线程的,会导致 I/O阻塞。而node 是单线程的,会缓解阻塞

    node和npm关系:

    node.js是javascript的一种运行环境,是对Google V8引擎进行的封装。是一个服务器端的javascript的解释器。

    包含关系,nodejs中含有npm,比如说你安装好nodejs,你打开cmd输入npm -v会发现出啊线npm的版本号,说明npm已经安装好。

    引用大神的总结:

    其实npm是nodejs的包管理器(package manager)。我们在Node.js上开发时,会用到很多别人已经写好的javascript代码,如果每当我们需要别人的代码时,都根据名字搜索一下,下载源码,解压,再使用,会非常麻烦。于是就出现了包管理器npm。大家把自己写好的源码上传到npm官网上,如果要用某个或某些个,直接通过npm安装就可以了,不用管那个源码在哪里。并且如果我们要使用模块A,而模块A又依赖模块B,模块B又依赖模块C和D,此时npm会根据依赖关系,把所有依赖的包都下载下来并且管理起来。试想如果这些工作全靠我们自己去完成会多么麻烦!

    npm install 包名 --save // 安装包并添加到依赖中

    npm install 包名 -g // 全局安装包(全局安装的包一般都是一些工具包)

    Buffer(缓冲区),用来保存数据
    • Buffer的结构和数组很像,操作的方法也和数组类似
    • 数组中不能存储二进制的文件,而Buffer是专门用来存储二进制数据
    • 使用buffer不需要引入模块,直接使用即可
    • 在buffer中存储的都是二进制数据,但是在显示时都是以十六进制的形式显示的(00 ~ ff, 因为计算机中最小的数据存储单位是字节(Byte),计算机最小的数据传输单位是:位/比特(bit), 一个字节等于8bit, 所以存储时是 00000000 ~ 11111111, 也就是 00 ~ ff)
    fs (文件系统)

    通过Node 来操作系统中的文件。服务器的本质就是将本地的文件发送过远程的客户端

    • 使用fs不需要引入模块,直接使用即可const fs = require('fs');
    • 打开文件 > 写入内容 > 关闭文件

    同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出。这时就需要流式文件写入。

    创建一个可写流 fs.createWriteStream

    打开流 > 写入内容 > 关闭流

    pipe() 可以将可读流中的东西直接输入到可写流中

    var fs = require("fs")
    
    // 创建一个可读流
    var rs = fs.createReadStream("c:/User/aaa")
    
    // 创建一个可写流
    var ws = fs.createWriteStream("b.mps");
    
    // pipe()  可以将可读流中的东西直接输入到可写流中
    rs.pipe(ws)
    
  • 相关阅读:
    python测试开发django177.启动项目添加初始化数据(fixtures的使用) 上海
    python笔记70 Python中`__repr__`和`__str__`区别 上海
    python笔记69 什么是猴子补丁(Monkey Patch)? 上海
    pytest文档78 钩子函数pytest_runtest_makereport获取用例执行报错内容和print内容 上海
    python测试开发django176.数据库迁移数据(manage.py dumpdata) 上海
    python3面试题:如何用python实现栈(Stack)的操作? 上海
    python笔记71 traceback.print_exc()保存异常内容 上海
    测试驱动开发 Rss Reader Item Marker
    Rhino Mocks (RhinoMock)2
    继承的Singleton模式的实现
  • 原文地址:https://www.cnblogs.com/zpsakura/p/14275696.html
Copyright © 2020-2023  润新知