Node.js入门——fs、path模块、URL端口号、模块化导入导出、包、npm软件包管理器

Node.js入门

1.介绍

  • 定义:跨平台的JS运行环境,使开发者可以搭建服务器端的JS应用程序
  • 作用:使用Node.Js编写服务器端代码
  • Node.js是基于Chrome V8引擎进行封装,Node中没有BOM和DOM
    在这里插入图片描述

2.fs模块-读写文件

  • 定义:封装了与本机文件系统进行交互的方法/属性
  • 语法
// 基于fs模块读写文件内容
// 1.加载模块对象
const fs = require('fs')
//2.写入文件内容
fs.writeFile('./text.txt', 'Hello,Node.js', (err) => {if (err) console.log(err)else console.log('写入成功')
})
//3.读取文件内容
fs.readFile('./text.txt', (err, data) => {if (err) console.log(err)// data是buffer 16进制数据流对象// .toString()转换成字符串else console.log(data.toString())
})

3.path模块-路径处理

  • 问题:Node.js代码中,相对路径是根据终端所在路径来查找的,可能无法找到想要的文件
  • 建议使用绝对路径
  • 补充:__dirname内置变量获取当前文件模块目录绝对路径
  • 注意:path.join()会使用特定于平台的分隔符,作为定界符,将所有路径片段连接在一起
  • 语法:
const fs = require('fs')
// 1.引入Path模块对象
const path = require('path')
// 2.调用path.join()配合__diename组成目标文件的绝对路径
fs.readFile(path.join(__dirname, '../text.txt'), (err, data) => {if (err) console.log(err)else console.log(data.toString())
})

4.URL端口号

  • 端口号:一台服务器里不同功能的服务程序,http默认80端口号

  • 常见服务程序:web服务程序(网上信息浏览的程序代码)

  • http模块——常见web服务

    eg:创建web服务器并响应内容给浏览器

    /*** 目标:基于 http 模块创建 Web 服务程序*  1.1 加载 http 模块,创建 Web 服务对象*  1.2 监听 request 请求事件,设置响应头和响应体*  1.3 配置端口号并启动 Web 服务*  1.4 浏览器请求(http://localhost:3000)测试*/
    // 1.1 加载 http 模块,创建 Web 服务对象
    const http = require('http')
    const server = http.createServer()
    // 1.2 监听 request 请求事件,设置响应头和响应体
    server.on('request', (req, res) => {// 设置响应头-内容类型-普通文本以及中文编码格式res.setHeader('Content-Type', 'text/plain;charset=utf-8')// 设置响应体内容,结束本次请求与响应res.end('欢迎使用 Node.js 和 http 模块创建的 Web 服务')
    })
    // 1.3 配置端口号并启动 Web 服务
    server.listen(3000, () => {console.log('Web 服务启动成功了')
    })
    

    eg:基于 Web 服务,开发提供网页资源的功能

    /*** 目标:基于 Web 服务,开发提供网页资源的功能* 步骤:*  1. 基于 http 模块,创建 Web 服务*  2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方*  3. 其他路径,暂时返回不存在提示*  4. 运行 Web 服务,用浏览器发起请求
    */const fs = require('fs')
    const path = require('path')
    // 1. 基于 http 模块,创建 Web 服务
    const http = require('http')
    const server = http.createServer()
    server.on('request', (req, res) => {// 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方if (req.url === '/index.html') {fs.readFile(path.join(__dirname, 'dist/index.html'), (err, data) => {res.setHeader('Content-Type', 'text/html;charset=utf-8')res.end(data.toString())})} else {// 3. 其他路径,暂时返回不存在提示res.setHeader('Content-Type', 'text/html;charset=utf-8')res.end('你要访问的资源路径不存在')}
    })
    server.listen(8080, () => {console.log('Web 服务启动成功了')
    })
    

5.模块化

  • 定义:每个文件都是独立的模块

  • CommonJS导入导出语法

    • 导出:module.exports={}
    /*** 目标:基于 CommonJS 标准语法,封装属性和方法并导出*/
    const baseURL = 'http://hmajax.itheima.net'
    const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
    // 导出
    module.exports = {url: baseURL,arraySum: getArraySum
    }
    
    • 导入:require(‘模块名或路径’)
    // 导入
    const obj = require('./utils.js')
    console.log(obj)
    const result = obj.arraySum([5, 1, 2, 3])
    console.log(result)
    
    • 模块名或路径名
      • 内置模块:直接写名字,例如:fs,path,http
      • 自定义模块:写模块文件路径,例如:./utils.js
  • ECMAScript标准默认导出导入语法

    • 导出:export dafault{}
    /*** 目标:基于 ECMAScript 标准语法,封装属性和方法并"默认"导出*/
    const baseURL = 'http://hmajax.itheima.net'
    const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)// 默认导出
    export default {url: baseURL,arraySum: getArraySum
    }
    
    • 导入:import 变量名 from ‘模块名或路径名’
    /*** 目标:基于 ECMAScript 标准语法,"默认"导入,工具属性和方法使用*/
    // 默认导入
    import obj from './utils.js'
    console.log(obj)
    const result = obj.arraySum([10, 20, 30])
    console.log(result)
    
  • 注意Node.js默认支持CommonJs标准语法,如果需要使用ECMAScript标准,在运行模块所在文件夹新建package.json文件,并设置{“type”:“module”}

    {"type": "module"
    }
    
  • ECMAScript标准命名导出导入语法

    • 导出:export 修饰定义语句
    export const baseURL = 'http://hmajax.itheima.net'
    export const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
    
    • 导入:import {同名变量} from ‘模块名或路径’
    import {baseURL, getArraySum} from './utils.js'
    console.log(obj)
    console.log(baseURL)
    console.log(getArraySum)
    const result = getArraySum([10, 21, 33])
    console.log(result)
    
    • 与默认导出导入的区别:可以按需导入

6.包

  • 定义:将模块,代码,其他资料聚合成一个文件夹
  • 分类
    • 项目包:用于编写项目和业务逻辑
    • 软件包:封装工具和党法进行使用
  • 要求:根目录中,必须有package.json文件:记录包的清单信息

7.npm软件包管理器

  • 定义:是Node.js标准的软件包管理器
  • 作用:下载软件包以及管理版本
  • 使用:
    • 初始化清单文件:npm init -y(得到package.json文件)
    • 下载软件包:npm i 软件包名称(得到node-modules文件夹)
    • 使用软件包
  • npm-安装所有依赖
    • 当导入别人的项目只有package.json,没有node-modules(因为自己下载以来比磁盘传递拷贝要快的多)
    • 解决:npm i
  • npm-全局软件包 nodemon
    • 本地软件包:当前项目内使用,封装属性和方法,存在于node_modules
    • 全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置
    • nodemon作用:替代node命令,检测代码更改,自动重启程序
    • 使用:2
      • 安装:npm i nodemon -g(-g代表安装到全局环境)
      • 运行:nodemon 待执行的目标js文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/446307.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式事务管理-Seata从入门到精通

一、基本概念 什么是数据库事务? 1、一个操作数据库数据的执行单元 2、到围从开始到结束的多个操作组成 3、事务内的多个操作要么都成功,要么都失败 什么是分布式事务? 1.分布式场景下,完成某一个业务功能可能需要横跨多个服务&#xff0…

jmeter入门:脚本录制

1.设置代理。 网络连接-》代理-》手动设置代理. ip: 127.0.0.1, port:8888 2. add thread group 3. add HTTP(s) test script recorder, target controller chooses Test plan-> thread Group 4. click start. then open the browser …

AIGC毕设项目分享:基于RAG的数字人对话系统及其应用

本研究的主要目标是设计并实现一个基于检索增强生成(RAG)技术的数字人对话系统,旨在提升数字人系统在多轮对话中的上下文管理、情境感知能力以及动态内容生成效果。系统结合了深度学习中的最新大语言模型技术,通过引入RAG框架来增…

ubuntu下route命令详解

buntu下route命令详解 1、显示路由表 route -n2、临时路由设置,重启网卡失效#添加一条路由(发往192.168.62这个网段的全部要经过网关192.168.1.1)route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1#删除一条路由 删除的时候不用写网关route del …

华为海思:大小海思的双轮驱动战略分析

华为海思,作为华为旗下的半导体设计部门,近年来在芯片设计领域取得了显著成就,成为了中国乃至全球芯片设计的重要力量。实际上,华为海思并非单一实体,而是由两个主要分支构成:大海思和小海思。这两个分支虽然同属华为海思,但在定位、产品布局以及市场策略上有所不同,共…

【测试】BUG篇——BUG

bug的概念 定义:⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault),这些bug使程序⽆法正确的运⾏。Bug产⽣于程序的源代码或者程序设计阶段的疏忽或者错误。 准确的来说: 当且仅当规格说明&am…

【大数据技术基础 | 实验二】Linux基础:常用基本命令和文件操作

文章目录 一、实验目的二、实验要求三、实验环境四、常用基本命令1、验证cd和pwd命令2、验证ls命令3、验证mkdir命令4、验证cp、mv和rm命令 五、Linux文件操作1、验证touch命令2、验证cat命令3、验证more命令 六、实验心得 一、实验目的 学会linux常用命令(cd,ls,pwd,mkdir,rm…

【Flutter】合并多个流Stream

1.说明 无意间发现了一个好用的库rxdart,它为 Dart 的 Stream 添加了额外的功能。 2.功能 (1)合并多个流Stream 借助Rx.combineLatest2()合并两个流stream1和stream2。 注意:如果dart文件中同时使用了getx,需要隐…

腾讯云视立方Electron 相关问题

安装相关 trtc-electron-sdk 是否兼容官方 Electron v12.0.1 版本? 兼容的,trtc-electron-sdk 没有特别依赖 elecron 自身的 SDK,所以没有相关的版本依赖。 Electron 下载慢甚至卡住不动? 当开始下载tmp-3320-1-SHASUMS256.txt-6.1.9文件…

【c语言——指针详解(4)】

文章目录 一、回调函数是什么?二、qsort的使⽤1、使⽤qsort函数排序整型数据2、使⽤qsort排序结构数据 三、qsort函数的模拟实现 作者主页 一、回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址&#xf…

【进阶OpenCV】 (12)--人脸检测识别

文章目录 人脸识别一、获取分类器二、代码实现1. 图片预处理2. 加载人脸检测分类器3. 检测人脸4. 标注人脸 总结 人脸识别 要实现人脸识别首先要判断当前图像中是否出现了人脸,这就是人脸检测。只有检测到图像中出现了人脸,才能据此判断这个人到底是谁。…

模拟电子电路基础(常见半导体+multisim学习1)

目录 1.半导体的基础 1.1.半导体基础知识 1.1.1本征半导体 1.1.2杂质半导体 1.1.3PN结 1.2半导体二极管 1.2.1半导体二极管的几种常见结构 1.2.2二极管的伏安特性曲线 1.2.3二极管的主要参数 1.2.4二级管的等效电路 1.2.5稳压二极管 1.2.其他类型二极管 2.multisim的…

计算机网络:数据链路层 —— PPP 点对点协议

文章目录 PPP 帧PPP帧的格式PPP帧的透明传输面向字节的异步链路面向比特的同步链路 PPP帧的差错检测 PPP 的工作状态 点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议,用于在两个节点之间进行数据…

线性代数 行列式

一、行列式 1、定义 一个数学概念,主要用于 线性代数中,它是一个可以从方阵(即行数和列数相等的矩阵)形成的一个标量(即一个单一的数值) 2、二阶行列式 ,像这样将一个式子收缩称为一个 2*2 的…

西门子828d的plc一些信息记录

1、虽然是200的plc但是引入了DB的形式替代原来的V存储区。 2、用户自定义DB块范围,DB9000-DB9063,共64个DB块。 可用地址范围如上图 机床MCP483面板地址表,其它类型的面板地址自己在828d简明调试手册里查看。 如何上载828d的plc程序: 1.通…

Chainlit集成Dashscope实现语音交互网页对话AI应用

前言 本篇文章讲解和实战,如何使用Chainlit集成Dashscope实现语音交互网页对话AI应用。实现方案是对接阿里云提供的语音识别SenseVoice大模型接口和语音合成CosyVoice大模型接口使用。针对SenseVoice大模型和CosyVoice大模型,阿里巴巴在github提供的有开…

数据结构之红黑树实现(全)

一、红黑树 红黑树是一种自平衡的二叉搜索树,它通过约束节点的颜色和结构来保持平衡。红黑树是由 Rudolf Bayer 在1972年发明的,被认为是一种优秀的平衡树结构,广泛应用于各种数据结构和算法中。 1.红黑树的性质 1. 每个结点是红的或者黑的…

Mac 备忘录妙用

之前使用 Windows 的过程中,最痛苦的事是没有一款可以满足我快速进行记录的应用 基本都得先打开该笔记软件,然后创建新笔记,最后才能输入,这么多步骤太麻烦了 在切换到 MacOS 之后,让我惊喜的就是自带的备忘录&#…

android——自定义控件(不停变化的textview、开关switch、动画效果的打勾)

一、从开始数字到结束数字,不断变化 import android.animation.TypeEvaluator; import android.animation.ValueAnimator; import android.content.Context; import android.util.AttributeSet; import android.view.animation.AccelerateDecelerateInterpolator;i…

设计模式-原型模式(克隆、Clone、Prototype)

原型模式(克隆、Clone、Prototype)是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 问题 譬如美国研制了一种特效药,而且还在专利保护器内,而印度制药公司看中了&#xff0…