【前端】Node.js一本通

近两天更新完毕,建议关注收藏点赞。

目录

  • 复习
  • Node.js概述
  • 使用
    • fs文件系统模块
    • path路径模块
  • http模块

复习

  1. 为什么JS可以在浏览器中执行
    原理:待执行的JS代码->JS解析引擎
    不同的浏览器使用不同的 JavaScript 解析引擎:其中,Chrome 浏览器的 V8 解析引擎性能最好!
    Chrome 浏览器 => V8
    Firefox 浏览器 => OdinMonkey(奥丁猴)
    Safari 浏览器 => JSCore
    IE 浏览器 => Chakra(查克拉)
  2. 为什么 JavaScript 可以操作 DOM 和 BOM
    每个浏览器都内置了 DOM、BOM 这样的 API 函数,因此,浏览器中的 JavaScript 才可以调用它们。
    在这里插入图片描述
  3. 浏览器中JS运行环境
    总结:V8 引擎负责解析和执行 JavaScript 代码。内置 API 是由运行环境提供的特殊接口,只能在所属的运行环境中被调用。
    在这里插入图片描述
  4. 学习路径总结
  • 浏览器中的 JavaScript 学习路径:
    JavaScript 基础语法 + 浏览器内置 API(DOM + BOM) + 第三方库(jQuery、art-template 等)
  • Node.js 的学习路径:
    JavaScript 基础语法 + Node.js 内置 API 模块(fs、path、http等)+ 第三方 API 模块(express、mysql 等)

Node.js概述

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。nodejs官网
  • 运行环境
    浏览器是 JavaScript 的前端运行环境。
    Node.js 是 JavaScript 的后端运行环境。
    Node.js 中无法调用 DOM 和 BOM 等浏览器内置 API。
  • 功能
    Node.js 作为一个 JavaScript 的运行环境,仅仅提供了基础的功能和 API。在此基础上,运用很多强大的工具和框架。
    基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
    基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用
    基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
    读写和操作数据库、创建实用的命令行工具辅助前端开发…
工具/框架简介特点
Express.js用于构建Web应用和API的轻量级框架简洁、快速、支持RESTful API、强大的路由功能
NestJS基于TypeScript的现代化Node.js框架,适用于企业级应用支持TypeScript、模块化架构、易于集成各种库
Koa.js由Express原班人马开发的框架,目标是更小更强大支持async/await、灵活的中间件机制
Hapi.js强大的Web框架,注重可扩展性和灵活性强大的插件系统、内置验证、路由和错误处理功能
Sails.js基于Express的MVC框架,适合数据驱动的API应用支持WebSockets、ORM、MVC结构
Socket.io实现实时、双向通信的JavaScript库支持WebSocket、易于集成、支持广播和房间功能
Electron.js使用Web技术构建跨平台桌面应用跨平台、支持丰富的原生API
Gulp.js基于流的JavaScript任务运行器,用于自动化前端任务流式任务系统、插件丰富、易于配置
Grunt.jsJavaScript任务运行器,自动化前端开发流程配置简洁、插件支持广泛
PM2Node.js进程管理工具,支持生产环境的应用管理进程管理、负载均衡、日志管理、性能监控
MongooseMongoDB的ODM库,简化与MongoDB的交互Schema支持、数据验证、查询构建、模型功能强大
  • 安装
    LTS是长期稳定版 企业项目推荐安装
node -v #查看版本

使用

  • 在 Node.js 环境中执行 JavaScript 代码
node js_path

补充终端快捷键
tab快速补全路径
esc快速清空当前已输入命令
cls清空终端

  • 实例:将html文件中的js css部分拆出来成一单独文件
[\s\S] 只匹配 一个字符;
[\s\S]* 才是匹配 任意数量的字符(包括 0 个);
[\s\S]*? 是非贪婪地匹配任意数量字符,直到匹配到后续的模式。
const fs=require('fs')
const path=require('path')
const regStyle=/<style>[\s\S]*<\/style>/
const regScript=/<script>[\s\S]*<\/script>/
fs.readFile(path.join(__dirname,'index.html'),'utf8',(err,datastr)=>{if(err)return console.log('文件读取失败'+err.message)resolveCSS(datastr)resolveJS(datastr)resolveHTML(datastr)
})function resolveCSS(htmlstr){const r1=regStyle.exec(htmlstr)const newcss=r1[0].replace('<style>','').replace('</style>','')fs.writeFile(path.join(__dirname,'index.css'),newcss,err=>{if(err)return console.log('文件写入失败'+err.message)console.log('css写入成功')})
}function resolveJS(htmlstr){const r2=regScript.exec(htmlstr)const newjs=r2[0].replace('<script>','').replace('</script>','')fs.writeFile(path.join(__dirname,'./index.js'),newjs,err=>{if(err)return console.log('文件写入失败'+err.message)console.log('js写入成功')})
}function resolveHTML(htmlstr){const newhtml=htmlstr.replace(regStyle,'<link rel="stylesheet" href="./index.css"/>').replace(regScript,'<script src="./index.js"></script>')fs.writeFile(path.join(__dirname,'./index.html'),newhtml,err=>{if(err)return console.log('文件写入失败'+err.message)console.log('html写入成功')})
}
  • 实例:实现clock时钟的web服务器
    把文件的实际存放路径,作为每个资源的请求 url 地址。
    在这里插入图片描述
const http=require('http')
const fs=require('fs')
const path=require('path')
const server=http.createServer()
server.on('request',function(req,res){const url=req.urllet fpath=''//const fpath=path.join(__dirname,url)if(url==='/'){fpath=path.join(__dirname,'./clock/index.html')}else{fpath=path.join(__dirname,'./clock',url)}fs.readFile(fpath,'utf8',(err,datastr)=>{if(err)return res.end('404 not found')res.end(datastr)})
})
server.listen(80,function(){console.log('listening')
})

fs文件系统模块

fs模块是nodejs提供的用来操作文件的模块。
fs.writeFile() 方法只能用来创建文件,不能用来创建路径
重复调用 fs.writeFile() 写入同一个文件,新写入的内容会覆盖之前的旧内容

//js中用fs模块操作文件
const fs=require('fs')//导入fs.readFile(path,[options],callback)
//参数2 可选 编码格式
//参数3 文件读取完成,通过回调函数拿到读取结果fs.readFile('./path.txt','utf8',function(err,datastr){if(err)return console.log('文件读取失败'+err.message)//err=null时读取成功,反之读取失败,datastr=undefinedconsole.log(datastr)
})fs.writeFile(file_path,data.[options],callback)
//data 要写入file的内容
//callback 文件写入完成后的回调函数
//是否写入成功也是判断err
  • 路径动态拼接的问题
    在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 …/ 开头的相对路径时,很容易出现路径动态拼接错误的问题。
    原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。
    解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 …/ 开头的相对路径,从而防止路径动态拼接的问题。
    __dirname 是 Node.js 中的一个全局变量,它表示当前模块(文件)所在的目录的绝对路径。它在所有模块中都可用,并且通常用于拼接路径,方便访问文件系统中的其他文件。
//__dirname: /Users/yourname/projectfs.readFile(__dirname+'/path.txt','utf8',function(err,datastr){if(err)return console.log('文件读取失败'+err.message)//err=null时读取成功,反之读取失败console.log(datastr)
})

path路径模块

path 模块是 Node.js 官方提供的、用来处理路径的模块。凡是后端(不是前端)涉及路径拼接的操作,用这个模块,不要用+进行字符串拼接。

const path=require('path') //导入path.join([...paths])//多个路径片段连接const filePath = path.join(__dirname, 'data', 'file.txt');
console.log(filePath);
// 输出:/Users/yourname/project/data/file.txtpath.basename(path,[ext])
//获取路径的最后一部分,用于获取路径中的文件名
//ext 可选,文件扩展名const fpath='/a/b/c/index.html'
var filename=path.basename(fpath)
var name_without_ext=path.basename(fpath,'.html')path.extname(path)//获取扩展名部分
const fext=path.extname(fpath)

http模块

http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务。
在 Node.js 中,我们不需要使用 IIS、Apache 等这些第三方 web 服务器软件。因为我们可以基于 Node.js 提供的 http 模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供 web 服务。

  • 创建 web 服务器的基本步骤
    导入 http 模块
    创建 web 服务器实例
    为服务器实例绑定 request 事件,监听客户端的请求
    启动服务器
const http=require('http')//导入
const server=http.createServer()//web服务器实例//为服务器实例绑定request事件 监听客户端发送过来的网络请求
server.on('request',(req,res)=>{//只要有客户端请求服务器,就会触发request事件,调用这个事件处理函数const str=`req url is ${req.url},req method is ${req.method}`console.log('welcome',str)//防止中文乱码res.setHeader('Content-Type','text/html;charset=utf-8')//res.end()向客户端发送内容,并结束这次请求处理过程res.end(str)
})//根据不同url相应不同html内容
server.on('request',(req,res)=>{//只要有客户端请求服务器,就会触发request事件,调用这个事件处理函数const url=req.urllet content='<h1>404 not found</h1>'if(url==='/' || url==='/index.html'){content='<h1>welcome欢迎</h1>'}else if(url==='/about.html'){content='<h1>it\'s me这是我 </h1>'}//防止中文乱码res.setHeader('Content-Type','text/html;charset=utf-8')//res.end()向客户端发送内容,并结束这次请求处理过程res.end(content)
})//启动服务器
server.listen(80,()=>{console.log('running')
})

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

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

相关文章

【AI论文】JavisDiT: 具备层次化时空先验同步机制的联合音视频扩散Transformer

摘要&#xff1a;本文介绍了一种新型的联合音频-视频扩散变换器JavisDiT&#xff0c;该变换器专为同步音频-视频生成&#xff08;JAVG&#xff09;而设计。 基于强大的扩散变换器&#xff08;DiT&#xff09;架构&#xff0c;JavisDiT能够根据开放式用户提示同时生成高质量的音…

Java-实现公有字段自动注入(创建人、创建时间、修改人、修改时间)

文章目录 Mybatis-plus实现自动注入定义 MetaObjectHandler配置 MyBatis-Plus 使用 MetaObjectHandler实体类字段注解使用服务类进行操作测试 Jpa启用审计功能实现自动注入添加依赖启动类启用审计功能实现AuditorAware接口实体类中使用审计注解 总结 自动注入创建人、创建时间、…

金融机构开源软件风险管理体系建设

开源软件为金融行业带来了创新活力的同时&#xff0c;也引入了一系列独特的风险。金融机构需要构建系统化的风险管理体系&#xff0c;以识别和应对开源软件在全生命周期中的各种风险点。下面我们将解析开源软件在金融场景下的主要风险类别&#xff0c;并探讨如何建立健全的风险…

图形渲染中的定点数和浮点数

三种API的NDC区别 NDC全称&#xff0c;Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下&#xff1a; featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…

同花顺客户端公司财报抓取分析

目标客户端下载地址:https://ft.51ifind.com/index.php?c=index&a=download PC版本 主要难点在登陆,获取token中的 jgbsessid (每次重新登录这个字段都会立即失效,且有效期应该是15天的) 抓取jgbsessid 主要通过安装mitmproxy 使用 mitmdump + 下边的脚本实现监听接口…

QT工程建立

打开软件新建一个工程 选择chose 工程命名&#xff0c;选择保存路径&#xff0c;可以自己选择&#xff0c;但是不要有中文路径 默认的直接下一步 任意选一个下一步 点击完成 之后是这个界面&#xff0c;点击右下角的绿色三角形编译一下 实验内容 添加类 第一个是建立cpp和.h文件…

【NLP 53、投机采样加速推理】

目录 一、投机采样 二、投机采样改进&#xff1a;美杜莎模型 流程 改进 三、Deepseek的投机采样 流程 Ⅰ、输入文本预处理 Ⅱ、引导模型预测 Ⅲ、候选集筛选&#xff08;可选&#xff09; Ⅳ、主模型验证 Ⅴ、生成输出与循环 骗你的&#xff0c;其实我在意透了 —— 25.4.4 一、…

ffmpeg时间基与时间戳

时间基、时间戳 时间基&#xff1a;表示时间单位的分数&#xff0c;用来定义视频或音频流中时间的精度。其形式是一个分数&#xff0c;分子通常为 1&#xff0c;而分母则表示每秒的单位数。 时间戳&#xff1a;代表在时间轴里占了多少个格子&#xff0c;是特定的时间点。 时间…

激光加工中平面倾斜度的矫正

在激光加工中&#xff0c;加工平面的倾斜度矫正至关重要&#xff0c;直接影响加工精度和材料处理效果。以下是系统的矫正方法和步骤&#xff1a; 5. 验证与迭代 二次测量&#xff1a;加工后重新检测平面度&#xff0c;确认残余误差。 反馈优化&#xff1a;根据误差分布修正补偿…

算法刷题记录——LeetCode篇(2.2) [第111~120题](持续更新)

更新时间&#xff1a;2025-04-04 算法题解目录汇总&#xff1a;算法刷题记录——题解目录汇总技术博客总目录&#xff1a;计算机技术系列博客——目录页 优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注&#xff01; 114. 二叉树展开为链表 给你二…

C语言学习笔记-9

九、结构体 构造类型&#xff1a; 不是基本类型的数据结构也不是指针类型&#xff0c; 它是若干个相同或不同类型的数据构成的集合 结构体类型&#xff1a; 结构体是一种构造类型的数据结构&#xff0c;是一种或多种基本类型或构造类型的数据的集合。 1.结构体类型定义 定…

Test——BUG篇

目录 一软件测试的生命周期 二BUG 1概念 2描述Bug 3Bug级别 4Bug的生命周期 三与开发人员发生争执怎么办 ​编辑1先自省&#xff1a;是否Bug描述不清晰 2站在用户角度考虑并抛出问题 3Bug定级有理有据 4不仅要提出问题&#xff0c;还要给出解决方案 5Bug评审 5.1…

【Block总结】HWAB,半小波注意力块|即插即用

论文信息 标题: HALF WAVELET ATTENTION ON M-NET+ FOR LOW-LIGHT IMAGE ENHANCEMENT 地址: arXiv:2203.01296 日期: 2022年3月 创新点 改进的分层架构 M-Net+: 提出了一个专为低光图像增强设计的改良分层模型 M-Net+。该架构旨在缓解采样过程中的空间信息损失问题。通过采用…

Spring 中的事务

&#x1f9fe; 一、什么是事务&#xff1f; &#x1f9e0; 通俗理解&#xff1a; 事务 一组操作&#xff0c;要么全部成功&#xff0c;要么全部失败&#xff0c;不能只做一半。 比如你转账&#xff1a; A 账户扣钱B 账户加钱 如果 A 扣了钱但 B 没收到&#xff0c;那就出问…

Flutter极速接入IM聊天功能并支持鸿蒙

Flutter极速接入IM聊天功能并支持鸿蒙 如果你们也是Flutter项目&#xff0c;想快速接入聊天&#xff0c;包括聊天的UI界面&#xff0c;强烈推荐这一家。因为我们已经完成了集成&#xff0c;使用非常稳定&#xff0c;集成也非常快捷方便。 而且&#xff0c;就在今天&#xff0c…

C# 类库生成后自动复制到指定目录

C# 类库生成后自动复制到指定目录 在C#中,当你开发了一个类库项目(通常是.NET Core或.NET Framework项目),你可能会希望在构建(Build)完成后自动将生成的DLL文件复制到指定的目录。有几种方法可以实现这个需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…

13-产品经理-产品多分支平台管理

禅道16.0版本开始&#xff0c;优化和增强了产品的分支/平台功能&#xff0c;主要特点如下&#xff1a; 多分支/平台功能兼容各种大小型项目&#xff0c;项目/迭代可以关联对应产品的某个分支/平台。分支/平台支持灵活管理&#xff0c;可以把分支/平台理解为时间层面的概念&…

手搓多模态-04 归一化介绍

在机器学习中&#xff0c;归一化是一个非常重要的工具&#xff0c;它能帮助我们加速训练的速度。在我们前面的SiglipVisionTransformer 中&#xff0c;也有用到归一化层&#xff0c;如下代码所示&#xff1a; class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层&am…

Qt 入门 1 之第一个程序 Hello World

Qt 入门1之第一个程序 Hello World 直接上操作步骤从头开始认识&#xff0c;打开Qt Creator&#xff0c;创建一个新项目&#xff0c;并依次执行以下操作 在Qt Creator中&#xff0c;一个Kits 表示一个完整的构建环境&#xff0c;包括编译器、Qt版本、调试器等。在上图中可以直…

深入理解MySQL:核心特性、优化与实践指南

MySQL是一个开源的关系型数据库管理系统(RDBMS)&#xff0c;由瑞典MySQL AB公司开发&#xff0c;目前属于Oracle公司。它是目前世界上最流行的开源数据库之一&#xff0c;广泛应用于各种规模的Web应用和企业系统中。 目录 一、核心特点 关系型数据库&#xff1a; 开源免费&am…