node.js

126 阅读7分钟

node 初认知

对 node 的了解

node 当时出现的 原因

    前端只有 JS 开发
    后端:JAVA PHP...
    所以 node 出现的原因就是为了 统一 全世界 的 编程语言
    当时的目的就是为了所有的开发者能够用一个语言,完成所有程序的编写
    
    当时给程序起了个名字,叫做 node,后续因为 JS 统一了前端,所以就想利用 JS 也去书写后端
    所以 node 是基于 JS 完成的
    
    所以 node 本质上是帮助我们 JS 扩展一些 完成后端的功能

node 是如何运行的

    JS 原本只能运行在 浏览器中,因为浏览器提供了运行JS环境 其中最重要的 是引擎
        谷歌浏览器有一个引擎比较出名,叫做V8
    node 就是把 谷歌的 V8 引擎 拿出来,去在电脑系统内运行,然后给我们的 JS 提供了一个 新
        的运行环境,也就是现在 JS 可以脱离浏览器,运行到我们的 电脑系统中

JS 运行到 node 环境 和 运行到浏览器环境 有什么区别?

    1.1 原本 JS 是 引入到 HTML 文件中,然后将HTML 文件运行到 浏览器中
        其中 HTML 提供了 DOM 的能力
        浏览器 提供了 BOM 的能力
        除了 DOMBOM 之外 就剩下一个 标准 ES
    1.2 但是现在 JS 不在引入到 HTML文件中, 也不再运行到 浏览器中,而是运行到 电脑系统中
        所以我们就失去了 DOMBOM 的能力
        所以就剩下了 ES
        但是我们 因为 运行在电脑系统中,所以我们也有了新的能力
            操作文件/目录;创建,编辑,删.....
     2.1 原本如果我们有多个 JS 文件,我们可以有多种 方式将 JS运行到一起
         将多个 JS 文件 引入到同一个 HTML 文件中,这些文件共享一个 全局作用域
         利用 Es6 模块化语法,将JS 进行一个合理的导入导出,然后使用
     2.2 在node 中,我们也有可能遇到 有多个 JS 文件的情况
         因为我们 node 中,不会出现 html 文件,所以 我们不能将多个 JS 文件 引入到同一个 HTML 
         文件中
         利用 CommonJS 的模块化规范 进行一个 导入 导出
         因为 node 出现的时间 08/09 年 此时 还没有 ES6
         但是我们只要书写了 node 就需要 模块化 ,所以就有了 Commonjs 的规范

命令行

    windows: cmd/powershell
    mac: 终端
    启动:cmd/powershell
        1.window + r
        2.上一步完成后 会弹出一个弹窗 名字叫做 运行
        3.在运行内的输入框输入 cmd 或者 powershell
        4.然后按下 回车 
        5.此时会弹出 一个 弹框,此时这个终端 的 地址,是我们系统的 基地址
        上述的启动方式地址可能和我们项目的地址不同,所以有一个 新的启动方式
        
        
        1.打开项目的文件夹
        2.在文件夹 上部大概 1/4 地址的输入栏,鼠标左键点击一次 ,选中地址文本的时候直接输入
        cmd/powershell
        3.然后按下回车
        
        1.使用 win + r 直接启动一个 小黑框  
        2.找到你的项目的文件夹所在的地址 复制 地址
        3.找到小黑窗 输入命令: cd 你的地址
        
        
        1.vscode 打开你的项目
        2.找到你项目文件夹,鼠标右键单击
        3.在弹出菜单中 找到 在集成终端中打开
        
        
        终端命令
            1.如果窗口文本太多,需要清空
                cmd: cls
                powershell: clear
            2.查询 当前 目录内的 内容
                cmd/powershell: dir
            3.如果 当前终端地址不对,需要更改
                1)去到下一个 目录: cd 目录名
                2)回到上一个目录:cd ..

利用 node 运行 JS

        1.随便打开一个终端,方式无所谓。cmd/pw 无所谓,终端路径无所谓
        2.在终端输入一个指令;node 然后敲回车
        3.此时我们会进入 JS 的 编译程序中,此时这个窗口类似于 浏览器的 控制台
            注意: 一定是 敲下 node 后 才可以
        但是上边的启动方式存在问题
            1.你在这个终端中书写 不能保存
            2.如果代码只有一行,那么书写没什么难度,如果代码是多行,那么书写起来很不方便
        所以上述的方式只能用,但不推荐
        
        推荐的方式
            1.在一个 JS 文件中书写我们要执行的代码
            2.鼠标右键单击这个文件,选择 在 集成终端中打开
            3.输入一个 命令 node 文件名
            4.敲回车

导入测试文件

    在 node 中 导入的文件 如果后缀为 .js 那么可以省略后缀
    
    导入文件的 时候 会将这个文件 整体执行一遍 
    然后将 导入的内容 拿到当前文件内

node 的 模块化语法

    模块化其实就是将 JS 内部部分数据或者方法导出 或者 再另一个 文件中导入 一个 文件内 
    的 数据或者 方法
    
    导出: 
        每一个 JS 文件,只要运行在 node 的 环境中,那么 就会自导 一个 变量 module
        这个变量对应的值是一个 对象,对象中 有很多属性
        其中有一个属性叫做 exports,这个属性的值 默认是一个空对象
        这个属性的值是什么,当前文件夹 就会导出什么
        
        
        1)给 module.exports 直接赋值(任意类型)
        2)给 module.exports 这个对象内添加一些属性(属性值无所谓)
        3)给 exports 这个对象内添加一些属性 (属性值无所谓)
    
    导入
        在每一个 JS 文件中 天生自带一个 方法(函数) require()
        调用这个函数的时候需要传入一个参数,这个参数是你需要导入的文件地址(
        require('导入文件的地址'))
        这个方法还有一个 返回值,返回值就是 你导入文件 module.exports 这个属性的值
        导入只有一个 语法
            const 变量 = require('导入文件的地址')

node 的模块

    在 node 中 每一个文件 就是一个 独立的模块
        模块还有一些具体的划分
            自定义模块:自己写的 每一个JS 文件,就是一个独立的自定义模块
            内置模块: node 中 提供好的模块
                对文件的处理
                对文件路径的处理
                对服务器的处理
                对 url 的处理
    fs/pash/url
    
    fs 模块 : 对文件做一些操作
        1)异步读取 文件
        fs.readFile('读取的文件地址','配置文件的格式','一个回调函数,读取完毕后执行')
        
        2)同步读取
        fs.readFileSync('读取文件的地址','配置文件的格式')
        
        3)向文件内写入数据:  第三个参数必须传递
        fs.writeFile('读取文件的地址','新增的文本','回调函数')
        
        4)向文件内 追加数据
        fs.appendFile('文件地址','新增文本','回调函数')
     
     
     pash 模块
         帮助我们完成文件的地址相关的操作
             拼接路径
             解析路径
         
         1.拼接路径:相对路径
             const str = path.join('a','b','c','d','e','f.html')
             // a\b\c\d\e\f.html
         2.拼接路径:绝对路径
             const baseUrl = path.resolve('a','b','c','d','e.html')
         3.解析路径
         const res = path.parse('D:/a/b/c/d/e.html')
     
     url 模块
         url.parse 默认不会帮我们解析 url 中的参数
         除非使用这个方法的时候 给 第二个参数 传递一个 布尔值 true 
     

初始 搭建服务器

    就是一个提供 服务的机器,比如说一些数据
      
      
      
    0.引入内置模块
    const http = require('http')
    1.创建一个服务器
    const server = http.createServer(() => {
        console.log('当有人请求我的时候就会触发')
    })
    1.1 创建函数是 函数接收两个参数
        第一个参数:request,对应的值为前端请求时携带的请求报文
        第二个参数:response,表示本次响应的相关信息,你只要添加到res 内,会由服务器
        自动组装响应报文返回给前端
    
    2.给服务器添加一个 ' 房间号 ' (其是就是添加一个端口号)
    server.listen(8080,() => {
        console.log('服务器启动成功~端口号为 8080')
    })