1、node.js实现的时钟案例

2023-10-31

目录

1.JavaScript相关知识回顾

1.1JavaScript

1.2浏览器中JavaScript的运行环境(前端运行环境)

 2.初始Node.js

2.1什么是Node.js

2.2Node.js中JavaScript的运行环境(后端运行环境)

3.时钟案例

3.1案例要实现的功能

3.1代码实现

4.http模块

4.1相关知识图

 4.2时钟web服务器

5.需要注意的点


1.JavaScript相关知识回顾

1.1JavaScript

        JavaScript通过JavaScript解析引擎可以在浏览器中被执行,通过浏览器内置的API可以对BOM和DOM等进行操作。

1.2浏览器中JavaScript的运行环境(前端运行环境)

         运行环境是指代码正常运行所需的必要环境,以chrome为例:V8引擎负责解析和执行JavaScript代码。内置API是由运行环境提供的特殊接口,只能在所属的运行环境中被调用。

         我们知道JavaScript可以用来做前端开发。JavaScript能否做后端开发呢?答案是肯定的!但是我们不能单纯的用JavaScript来做后端开发,需要借助Node.js运行环境。

        通俗的来说,我们的JavaScript是一门语言,我们这门语言所编写的代码如果想去执行的话就离不开运行坏境,如果我们把JS代码运行在浏览器中(浏览器是一个运行环境),我们的JS代码就可以去做前端开发。同时如果我们把JS代码运行在Node.js中(后端运行环境)我们的JS代码就可以去做后端开发

 2.初始Node.js

2.1什么是Node.js

        Node.js是一个基于Chrome V8引擎的JavaScript运行环境

2.2Node.js中JavaScript的运行环境(后端运行环境)

3.时钟案例

3.1用到的node.js内置的API模块

         案例分析:此次案例我们需要用到Node.js内置的API模块fs(文件系统模块:提供了一系列方法和属性,用来满足对文件的操作需求)和path(路径模块:用来满足用户对路径的处理需求)

3.1.1文件系统模块fs学习

看视频安装node.js

  • 读取文件内容:fs.readFile()
  •  向文件写入内容:fs.writeFile()
  •  读写练习:考试成绩整理

 3.1.2路径模块path

  • __dirname表示当前文件所处的目录
  • 今后凡是涉及到路径拼接的问题时都用path.join()方法进行处理

  •  得到文件名path.basename()
  •  得到扩展名部分path.extname()

3.1代码实现

// 1.1导入fs
const fs = require('fs')
    // 1.2导入path
const path = require('path')

//1.3定义正则表达式,分别匹配<style></style>和<script></script>标签
// [\s\S]表示匹配空格和非空格
const regStyle = /<style>[\s\S]*<\/style>/
const regScript = /<script>[\s\S]*<\/script>/

// 2.1调用fs.readFile()方法读取文件
fs.readFile(path.join(__dirname, '../素材/index.html'), 'utf8', function(err, dataStr) {
        // 2.2文件读取失败
        if (err) {
            console.log('文件读取失败' + err.message)
        }
        // 2.3读取文件成功后,调用对应的三个方法,分别解析出css,js,html文件
        resolveCSS(dataStr)
        resolveJS(dataStr)
        resolveHTML(dataStr)
    })
    // 3.1定义处理css样式的方法
function resolveCSS(htmlStr) {
    // 3.2使用正则提取需要的内容
    const r1 = regStyle.exec(htmlStr)
        // 3.3将提取出来的样式字符串,进行字符串的replace替换操作
    const newCSS = r1[0].replace('<style>', '').replace('</style>', '')
        // console.log(newCss)
        // 3.4调用fs.writeFile()方法,将提取的样式,写入到clock目录中index.css的文件里边
    fs.writeFile(path.join(__dirname, './clock/index.css'), newCSS, function(err) {
        if (err)
            return console.log('写入css样式失败!' + err.message)
        console.log('写入样式成功!')
    })
}

// 4.1定义处理js脚本的方法
function resolveJS(htmlStr) {
    // 4.2使用正则提取对应的<script></script>标签
    const r2 = regScript.exec(htmlStr)
        //4.3将提取出来的样式字符串,进行字符串的replace替换操作
    const newJS = r2[0].replace('<script>', '').replace('</script>', '')
        // console.log(newJS)
        // 4.4调用fs.writeFile()方法,将提取的脚本,写入到clock目录中index.js的文件里边
    fs.writeFile(path.join(__dirname, './clock/index.js'), newJS, function(err) {
        if (err)
            return console.log('写入js脚本失败!' + err.message)
        console.log('写入脚本成功!')
    })
}

// 5.1定义处理HTMl结构的方法
function resolveHTML(htmlStr) {
    // 5.2将内嵌的style标签和script标签替换为外联的link和script标签
    const newHTML = htmlStr.replace(regStyle, '<link rel="stylesheet" href="index.css"/>').replace(regScript, '<script src="index.js"></script>')
        // 5.3写入index.html这个文件
    fs.writeFile(path.join(__dirname, './clock/index.html'), newHTML, function(err) {
        if (err)
            return console.log('写入html失败!' + err.message)
        console.log('写入html成功!')
    })
}

4.http模块

4.1相关知识图

  • 创建web服务器
  • req请求对象(浏览器只能发起默认的GET请求)
  • 如何进行POST请求

需要借助postman工具

  •  解决中文乱码问题
  • 根据不同的url相应不同的页面

 4.2时钟web服务器

       创建一个web服务器,将之前拆分出来的文件对外提供为外部资源。

核心思路

 实现步骤:

代码实现:

// 1导入需要的模块
const http = require('http')
const fs = require('fs')
const path = require('path')

// 2.1创建web服务器
const server = http.createServer()
    // 2.2监听web服务器的request事件
server.on('request', (req, res) => {
        // 3.1获取到客户端请求的url地址
        // /clock/index.html
        // /clock/index.js
        // /clock/index.css
        const url = req.url
            // 3.2把请求的url地址映射为具体文件的存放路径
            // const fpath = path.join(__dirname, url)
            // 5.1预定义空白的存放路径
        let fpath = ''
        if (url === '/') {
            // 5.2如果请求的路径为/,则手动指定文件的存放路径
            fpath = path.join(__dirname, './clock/index.html')
        } else {
            // /index.html
            // 5.3否则动态拼接文件的存放路径
            fpath = path.join(__dirname, './clock', url)
        }

        // 4.1根据映射过来的文件路径读取文件的内容
        fs.readFile(fpath, 'utf8', (err, dataStr) => {
            // 4.2读取失败,向客户端响应固定的错误消息
            if (err) return res.end('404 Not found')
                // 4.3读取成功,将成功的内容响应给客户端
            res.end(dataStr)
        })
    })
    // 2.3启动服务器
server.listen(8080, () => {
    console.log('server running at http://127.0.0.1:8080')
})

5.需要注意的点

1.注意文档的存储路径。

2.利用res.end()向客户端发送内容时出现的乱码问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1、node.js实现的时钟案例 的相关文章

  • Angular - 如何从 DOM 中删除我使用过 $compile 的元素?

    我需要的是两个 ng views 的功能 因为我不能 我想更改某些内容的innerHTML 并编译它 我遇到的问题是 当我再次更改内容时 我可以编译 但是 Angular 是否会自行删除绑定 或者我必须手动执行此操作 如果是这样 怎么办 编
  • 我如何能够以两行显示标题,并且每行的字体大小不同?

    我正在使用 Google Chart API 创建时间线图 并希望将图的标题修改为两行 问题 我如何能够显示具有不同字体大小的两线图表标题 电流输出 理想输出 相关研究 我唯一能找到的是有人试图用饼图来做到这一点 但我尝试了但无法使其发挥作
  • 将鼠标悬停时的鼠标光标更改为锚状样式

    如果我将鼠标悬停在div鼠标光标将更改为 HTML 锚点中的光标 我怎样才能做到这一点 假设你的div has an id myDiv 将以下内容添加到您的 CSS 中 这cursor pointer指定光标应与用于锚点 超链接 的手形图标
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 在新的 Google 协作平台 <嵌入 HTML> 中使用 localStorage 和 IndexedDB 不起作用

    我正在尝试将新的 Google 协作平台用于我开发的网页 但是 我在存储本地数据时遇到了问题 本地文件在 Windows 和 Apple safari chrome 中运行良好 从 Google 协作平台尝试一下 没有什么乐趣 此外 在 s
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening

随机推荐

  • uni-app小程序中v-show与display:flex一起使用时v-show不生效!

    问题 同时使用v show与display flex的时候 发现v show不能隐藏元素 原因 经排查原因后发现是因为display flex样式的优先级高于了v show中的display none 解决办法 display flex不要
  • xpah的使用

    目录 基本介绍 基本使用 案例 基本介绍 为什么要学习xpath scrapy框架支持xpath提取 selenium 经常使用xpath提取 使用简洁 语法稍稍复杂 xpath是什么 全称 xml path language 从xml中提
  • Jackson快速入门

    Java生态圈中有很多处理JSON和XML格式化的类库 Jackson是其中比较著名的一个 虽然JDK自带了XML处理类库 但是相对来说比较低级 使用本文介绍的Jackson等高级类库处理起来会方便很多 引入类库 由于Jackson相关类库
  • How to use jupyterlab in Ubuntu 22.04

    How to use jupyterlab in Ubuntu 22 04 Install Start Stop Install lwk qwfys pip install jupyterlab upgrade i http mirrors
  • matplotlib中颜色映射的使用

    matplotlib3 3中使用颜色映射 问题描述 在Python编程从入门到实践一书中15 2 8节 按照书中代码 在python3 8与matplotlib3 3中 camp plt cm Blues报错 解决 搜索发现应将此处语法改为
  • WDS桥接副路由器有线上网方法

    副路由器DHCP一定要关闭 或者IP池设置的范围不能包括有线设备IP
  • 替换字符串中出现的某段字符串的C语言和C++实现方式

    C语言实现方式 使用了循坏来重复替换操作 直到无法再找到需要替换的子串为止 具体实现如下 include
  • ajax地址url和action,jsp,ajax_JSP中 post url地址重写or action如何实现,jsp,ajax - phpStudy...

    JSP中 post url地址重写or action如何实现 求解在JSP中 post url地址 ctx web webuser getRights 这个是获取导航JSON ctx 是应用地址知道 后面 web webuser getRi
  • Docker实践(一)应用场景和安装

    随着互联网的发展 容器技术越来越得到大规模应用厂家的重视 Docker作为paas平台的容器 最近几年引起众多技术人士的关注 并且也越来越流行 一 Docker是什么 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依
  • (c/c++)——类型转换

    文章目录 一 C风格的类型转换 二 C 的强制类型转换 1 static cast 最常用 2 reinterpret cast 只用于指针或引用转换 3 const cast 去除指针或引用的const限定 4 dynamic cast
  • QT 项目中 配置文件 pro详解

    QT 的配置文件 pro 解析 1 注释 单行注释 2 QT core gui QT gui 新增 或者减去 QT使用的模块 各个模块间使用空格分开 默认会包含 core 与 gui两个模块 3 TEMPLATE VALUE模板 VALUE
  • mysql group by 后求和_MySQL分组求和GROUP BY

    源代码实例 工资统计表 SELECT wages header bill date wages name SUM wages money AS moneys FROM wages header LEFT JOIN wages ON wage
  • 输入字符串,统计各个字符出现的个数(C语言实现)

    include
  • java 线程同步的list_java集合框架线程同步代码详解

    List接口的大小可变数组的实现 实现了所有可选列表操作 并允许包括null在内的所有元素 除了实现List接口外 此类还提供一些方法来操作内部用来存储列表的数组的大小 此类大致上等同于Vector类 除了此类是不同步的 size isEm
  • C语言——输入3个整数进行比较,要求从小到大输出

    方法一 3个数值从小到大进行排序 把所有可能罗列出来 输出的时候选择运行其中的一种可能输出 include
  • MySQL集群高可用架构

    MySQL集群高可用架构 前言 高可用架构对于互联网服务基本是标配 无论是应用服务还是数据库服务都需要做到高可用 对于一个系统而言 可能包含很多模块 比如前端应用 缓存 数据库 搜索 消息队列等 每个模块都需要做到高可用 才能保证整个系统的
  • java中的IO和NIO的区别原理

    Java NIO和IO的主要区别 IO NIO 面向Stream 面向Buffer 阻塞IO 非阻塞IO Selectors 面向Stream和面向Buffer Java NIO和IO之间最大的区别是IO是面向流 Stream 的 NIO是
  • Hadoop学习笔记二 - kNN算法实现用户风险分类

    在银行这个极其庞杂的交易体系中 每天都能收集到大量的用户信息和用户数据 而伴随着我国利率市场化的不断深化 净利差的迅速收窄 各大银行都希望利用手头的大量用户信息和实时产生的用户数据 对用户进行深度分析挖掘以便进行风险管控和个性化营销 降低银
  • minikube安装

    linux下安装minikube 下载minikube sudo curl Lo minikube https storage googleapis com minikube releases latest minikube linux a
  • 1、node.js实现的时钟案例

    目录 1 JavaScript相关知识回顾 1 1JavaScript 1 2浏览器中JavaScript的运行环境 前端运行环境 2 初始Node js 2 1什么是Node js 2 2Node js中JavaScript的运行环境 后