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.mfbz.cn/a/890485.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python异常处理详解:try, except, else, finally的使用方法与示例

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

【Iceberg分析】Spark集成Iceberg采集输出

Spark集成Iceberg采集输出 文章目录 Spark集成Iceberg采集输出Iceberg提供了两类指标和提供了两类指标输出器ScanReportCommitReport LoggingMetricsReporterRESTMetricsReporter验证示例相关环境配置结果说明 Iceberg提供了两类指标和提供了两类指标输出器 ScanReport 包含在…

论文笔记:Prompt-Based Meta-Learning For Few-shot Text Classification

论文来源:EMNLP 2022 论文地址:2022.emnlp-main.87.pdf (aclanthology.org) 代码地址:GitHub - MGHZHANG/PBML GB/T 7714 Zhang H, Zhang X, Huang H, et al. Prompt-Based Meta-Learning For Few-shot Text Classification[C]//Proceedi…

一维数组的引用

#define SIZE 5 int main(void) { int i 0; int arr[SIZE] { 86,85,85,896,45 };//同理五个数据只是偶然&#xff0c;可能会更多 //输入 for (i 0;i < SIZE;i) { printf("请输入你的第%d个值&#xff1a;",i1); scanf_s(&…

设计模式之适配器模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、适配器模式2、适配器模式的使用场景3、优点4、缺点5、主要角色6、代码示例1&#xff09;UML图2&#xff09;源代码&#xff08;1&#xff09;定义一部手机&#xff0c;它有个typec口。&#xff08;2&#xff09;定义一个vga接口。&#xff08;3&#x…

拆解学习【无线充,EMMC,锂电池电量计,OTA】(二)

主要学习到了&#xff1a;无线充&#xff0c;EMMC&#xff0c;手表CPU方案&#xff0c;锂电池电量计&#xff0c;OTA。 无线充电功能是产品的核心卖点之一&#xff0c;充电头网通过拆解发现&#xff0c;手表内部使用恒玄BES2500BP智能手表单芯片解决方案&#xff0c;内置四核C…

图书馆自习室座位预约管理微信小程序+ssm(lw+演示+源码+运行)

摘 要 随着电子商务快速发展世界各地区,各个高校对图书馆也起来越重视.图书馆代表着一间学校或者地区的文化标志&#xff0c;因为图书馆丰富的图书资源能够带给我们重要的信息资源&#xff0c;图书馆管理系统是学校管理机制重要的一环&#xff0c;,面对这一世界性的新动向和新…

linux线程 | 线程的控制(二)

前言&#xff1a; 本节内容是线程的控制部分的第二个小节。 主要是列出我们的线程控制部分的几个细节性问题以及我们的线程分离。这些都是需要大量的代码去进行实验的。所以&#xff0c; 准备好接受新知识的友友们请耐心观看。 现在开始我们的学习吧。 ps:本节内容适合了解线程…

如何用AI两小时上线自己的小程序

ChatGPT这个轰动全球的产品自问世以来&#xff0c;已经过了将近2年的时间&#xff0c;各行各业的精英们如火如荼的将AI能力应用到自己生产的产品中来。 为分担人类的部分工作&#xff0c;AI还具有非常大的想象空间&#xff0c;例如对于一个程序员来说&#xff0c;使用AI生成快…

Redis——持久化

文章目录 Redis持久化Redis的两种持久化的策略定期备份&#xff1a;RDB触发机制rdb的触发时机&#xff1a;手动执行save&bgsave保存测试不手动执行bgsave测试bgsave操作流程测试通过配置&#xff0c;自动生成rdb快照RDB的优缺点 实时备份&#xff1a;AOFAOF是否会影响到red…

Redis:分布式 - 主从复制

Redis&#xff1a;分布式 - 主从复制 概念配置主从模式info replicationslave-read-onlytcp-nodelay 命令slaveof 主从结构一主一从一主多从 主从复制流程数据同步命令全量同步部分同步实时同步 节点晋升 概念 Redis的最佳应用&#xff0c;还是要在分布式系统中。对于非分布式…

前端优化,解决页面加载慢

问题&#xff1a;vue项目使用vite打包后&#xff0c;部署在nginx服务器上&#xff0c;页面上访问时很慢&#xff0c;发现有个js文件很大导致加载很慢 先说结论&#xff1a; 方式时间未优化前21s开启压缩&#xff08;6级&#xff09;6s去掉大依赖&#xff08;flowable&#xf…

YoloV8改进策略:BackBone改进|CAFormer在YoloV8中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入YoloV8模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…

解决海外社媒风控问题的工具——云手机

随着中国企业逐步进入海外市场&#xff0c;海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下&#xff0c;云手机作为一种新型技术解决方案&#xff0c;正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控&#xff0c;企业经常面临账号流…

【计算机网络 - 基础问题】每日 3 题(三十八)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

MongoDB初学者入门教学:与MySQL的对比理解

&#x1f3dd;️ 博主介绍 大家好&#xff0c;我是一个搬砖的农民工&#xff0c;很高兴认识大家 &#x1f60a; ~ &#x1f468;‍&#x1f393; 个人介绍&#xff1a;本人是一名后端Java开发工程师&#xff0c;坐标北京 ~ &#x1f389; 感谢关注 &#x1f4d6; 一起学习 &…

利用弹性盒子完成移动端布局(第二次实验作业)

需要实现的效果如下&#xff1a; 下面是首先是这个项目的框架&#xff1a; 然后是html页面的代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

基于SpringBoot+Vue+uniapp的高校教务管理小程序系统设计和实现

2. 详细视频演示 文章底部名片&#xff0c;联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 5. 技…

深入Semantic Kernel:插件开发与实践应用(进阶篇)

文章目录 一、引言二、开发Semantic Kernel插件三、实战3.1 时间信息插件3.2 小部件工厂插件3.3 初始化Semantic Kernel实例3.4 四个实战示例3.4.1 模型幻觉3.4.2 给模型提供时间信息3.4.3 AI自动调用函数3.4.4 AI自动调用和使用枚举 四、结论 一、引言 在上一篇入门文章《探索…

集成方案 | 借助 Microsoft Copilot for Sales 与 Docusign,加速销售流程!

加速协议信息提取&#xff0c;随时优化邮件内容~ 在当今信息爆炸的时代&#xff0c;销售人员掌握着丰富的数据资源。他们能够通过 CRM 平台、电子邮件、合同库以及其他多种记录系统&#xff0c;随时检索特定个人或组织的关键信息。这些数据对于销售沟通至关重要。然而&#x…