提供通过 Node.js 中的链接标签链接到 HTML 文件的 CSS 样式表,无需框架

2024-02-06

我一直通过反复试验的方式自学 Node.js。我使用 Node.js HTTP 类构建了一个简单的服务器。我发现我可以异步读取文件并使用异步服务提供数据fs.readFile(..., cbk)回调方法。目前我不明白的是如何响应请求所需的所有其他资源。



// "./index.js"

var http = require('http');
var fs = require('fs');

http.createServer(function (req, res){
    fs.readFile('index.html', function(err, data){
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.write(data);
        res.end();
  });
}).listen(8080);


为了保持单一焦点,我将只使用Style-sheets举个例子。下面是一个超级常见的链接标签,它演示了我通常如何告诉服务器页面需要特定的 CSS 文件。它在前端方面工作得很好。但是,如何处理来自服务器端(或后端)链接标记的请求?

<link rel="stylesheet" type="text/css" href="/foo/bar/raboof.css">
注意:这只是一个测试项目,但它没有使用任何框架,甚至没有任何模块(除了 dev-mod eslint)。我更愿意在没有第三方软件/工具/框架等的情况下执行此操作...

您的 Node.js 服务器未编程为在浏览器请求时发送任何样式表。

像您创建的那样,nodejs 服务器默认不提供任何文件。它只提供您编程提供的文件。所以,你的nodejs服务器被编程为做一件事并且只做一件事,那就是交付index.html无论从它请求什么 URL。

那么,会发生以下情况:

  1. 用户输入您网站的一些 URL
  2. 浏览器向您的服务器发送对该页面的请求
  3. 您的网络服务器提供index.html
  4. 浏览器解析index.html并找到样式表链接
  5. 浏览器向您的服务器发送样式表链接请求
  6. 你的服务器发送它index.html
  7. 浏览器意识到“这不是样式表”,并且您没有得到任何样式

因此,为了让您的 HTML 服务器正常工作,您必须添加代码来查看请求的 URL,如果它是样式表 URL,则需要发送该样式表的正确文件,而不仅仅是盲目发送index.html不管有什么要求。

没有人说你需要使用 Express 库来实现此目的,但这就是它的作用。它使得配置发出不同类型的请求时发送的内容变得非常容易。而且,对于 CSS 文件等静态资源的请求,甚至可以将其配置为自动直接从文件系统发送它们。

如果您不想为此使用 Express,则不必这样做,但是您必须编写自己的代码,以便在请求不同的 URL 时提供正确的数据。

如果您想为此编写自己的代码,则必须创建某种if/else or switch语句或表查找req.url然后发送与请求的 URL 匹配的适当内容。然后,当浏览器请求您的样式表时,您实际上可以向其发送适当的样式表,而不是index.html。对于 JavaScript 文件、图像、页面图标、ajax 请求或页面引用的服务器上的任何资源也是如此。

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

提供通过 Node.js 中的链接标签链接到 HTML 文件的 CSS 样式表,无需框架 的相关文章

  • 如何在yarn中指定本地注册表?

    我有一个本地 Nexus 服务器 基本上我希望在上线之前先查看一下它prefer offline yarn install prefer offline cache folder C folder yarn cache preferred
  • 有什么不同? .on“连接”与.on“连接”

    我很难理解以下之间的区别 io on connection function io on connect function 可能是一个相当原始的问题 但是我无法找到有关它的明确文档 很想了解其中的区别 这些是同一事物的不同名称 正如所写so
  • Node.js Async/Await 模块导出 [重复]

    这个问题在这里已经有答案了 我对模块创建有点陌生 想知道 module exports 并等待异步函数 例如 mongo connect 函数 完成并导出结果 在模块中使用 async await 正确定义了变量 但是当尝试通过要求模块来记
  • Heroku ENOENT:没有这样的文件或目录,stat '/app/build/index.html'

    我在 Heroku 中运行一个简单的测试站点时遇到问题 由于某种原因 当我希望它从 build 提供服务时 它试图从 app build 提供内容 错误 ENOENT 没有这样的文件或目录 stat app build index html
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 如何从@google-cloud/storage读取文件?

    我正在从我的存储桶中检索文件 我收到该文件并想要阅读其内容 但我不想将其下载到我的本地项目 我只想读取内容 获取数据并用它进行其他操作 我的代码 export const fileManager async gt try const sou
  • 使用 TFS 2015 运行 Jest 单元测试

    有人尝试将 jest 单元测试与 TFS 2015 集成吗 我尝试使用 Chutzpah 测试适配器 https visualstudiogallery msdn microsoft com f8741f04 bae4 4900 81c7
  • Node.js:读取 URL 中传递的参数

    在 Rails 中 我向服务器发出 POST 请求 response Typhoeus Request post http url localtunnel com request from ola to ole result JSON pa
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • NodeJs 环境变量与配置文件

    实际上 我有一个 NodeJS Express 应用程序 其配置文件包含主机 端口 JWT 令牌 数据库参数等参数 问题是 将这些参数直接保留在环境变量上 没有任何配置文件 并访问它们 而不需要在所有组件和模块中进行 require 配置是
  • 动态更改温斯顿的日志级别

    我尝试在运行时实现日志级别更改 我一直在关注https github com yannvr Winston dynamic loglevel blob master test https github com yannvr Winston
  • 电子应用程序可以播放本地支持的任何视频吗?

    我知道浏览器通常会限制玩家mp4 and webm类型的媒体 但我想知道基于电子的应用程序是否可以运行 MKV 和 AVI 等格式的本地视频 我找不到明确的来源来告诉我什么是可用的 什么是不可用的 Electron 仍然仅限于网络技术 这意
  • Socket.io 400(错误请求)

    我的服务器上有这段代码 var express require express var routes require routes var user require routes user var http require http var
  • Node.js 上的 starttls > 0.4.0

    我遇到了这个线程Node js HTTPS 安全错误 https stackoverflow com questions 5136353 node js https secure error其中提到 tls 模块是现在在节点上执行 TLS
  • 通过pm2运行node.js,但经常重新启动:通过信号[SIGINT]以代码[0]退出

    我试图在我的系统上运行 node js 但遇到了这个问题 2016 06 01 20 46 28 App app with id 13 and pid 12633 exited with code 0 via signal SIGINT 2
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • Phantom-node模块无法加载外部资源

    我正在开发一个nodejs服务器 它将发布的html呈现为pdf png或jpg https github com svenhornberg pagetox https github com svenhornberg pagetox ser
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud

随机推荐

  • 如果条件不满足,如何在 Dropzone.js 中取消/中止上传?

    我在用着Dropzone js http dropzonejs com上传文件 现在我想检查某个字段是否已填写 如果没有填写则取消上传 我的 HTML 代码
  • 混合混合模式背景,子内容不受影响

    我正在尝试使用混合混合模式来创建具有多重效果叠加的背景 该叠加效果还可以显示部分背景 我还需要子内容不受混合模式的影响 像这样 我尝试将混合模式设置为取消设置 我也尝试使用隔离 隔离 但似乎无法使该选项起作用 我不想使用伪元素或将内容放置在
  • 如何在 django Rest Framework 中反转 ViewSet 自定义操作的 URL

    我已经为 ViewSet 定义了自定义操作 from rest framework import viewsets class UserViewSet viewsets ModelViewSet action methods get det
  • QTableView格式化数字

    我已经创建了一个代表 我可以对齐并粗体显示表格上的数字 我想强制它们保留两位小数 例如 1 2 应显示为 1 20 这是 delagte 的标题 ifndef TOTALDELEGATE H define TOTALDELEGATE H i
  • Unity (Unity5) 中 c# 中的属性 - 可以避免支持变量吗

    对于Unity5 很难确切地知道正在使用什么版本的c Mono Net 我们的属性完全像这样 private int distance public int Distance private set distance value contr
  • 当元素为空时,保存会向 XML 添加返回换行符

    我正在加载一个 XML 文档 其中有一些没有内部文本的标签 如果我用一些数据填充内部文本 那么它会根据需要工作 您可以在一行上获得开始标记 内部文本和结束标记 如下所示
  • Android Web 视图中的 Html 音频

    我是 HTML 和 Java 的初学者 我正在尝试使用 HTML 和 Java 通过 Web 视图在 Android 上的简单 Web 应用程序中播放音频文件 我已经成功地让它在 Android 4 0 上运行 但它不适用于 2 3 3 或
  • Erubis 块助手通过 concat 抛出错误

    我有几个块助手 这是我正在做的一个简单示例 def wrap foo foo block data capture block content div class data div concat content end 我只是尝试 erub
  • Hibernate 缓存级别 1

    我对缓存级别 1 有一个误解 到目前为止 我发现缓存级别 1 仅用于推迟 sql 调用 直到刷新事务 但是物体呢 例如 我仅使用缓存级别 1 如果我在 1 个事务内多次加载同一个对象 会发生什么情况 hibernate 是否使用某种身份映射
  • 提交颠覆时可以修改文本文件吗?

    我想在正在提交的文本文件上运行以下脚本 Send the commands H and w to ed ed will append newline if the file does not end in one printf s n H
  • 将标记捕捉到最近的折线点 Google 地图颤动

    我正在为我的大学班车编写一个简单的公交车跟踪应用程序 我已经将公交车 GPS 绘制为导航箭头以及地图上的路线 现在 由于实际的 GPS 坐标与绘制的路线相比 与公交车的实际位置有一些偏差 因此稍微偏离了道路 我可以调用任何方式或方法将这些标
  • Rails ActiveRecord 按连接表关联计数排序

    我有一个Resource可以使用 Acts As Votable 宝石进行投票的模型 Github页面 https github com ryanto acts as votable 投票系统运行完美 但我试图显示按数量排序的页面votes
  • 如何更改已发布扩展的发布者名称?

    我想更改 VScode 市场中的发布者名称 我怎么做 迟回复 你看过这个吗VS Code Github 问题 https github com Microsoft vscode issues 3670 基本上他们说他们could从技术上讲
  • 处理 Hibernate 事务

    目前我已将此代码复制到each我的控制器方法之一 Transaction transaction HibernateUtil getSessionFactory getCurrentSession getTransaction if Hib
  • 在 Rails 3 应用程序中使用 jQuery-UJS 进行远程 link_to 时出现解析器错误:如何调试?

    我正在尝试使用 Rails 3 单击链接后替换 div 的内容 remote link remote gt true和 jQuery 到目前为止 我已经能够让控制器渲染正确的部分 同时使用 200 HTTP 代码进行响应 我设置了一些回调来
  • 在 R 中更改 Tor 身份

    我将 Tor 与 R 结合使用 并希望针对每个新请求更改我的 IP 我的代码如下 library RCurl opts lt list proxy 127 0 0 1 proxyport 8118 for i in 1 10 con lt
  • 适用于 Android 的 Adob​​e AIR 上的无引脚 OAuth

    我在 Adob e AIR for Desktop iOS 上使用了无引脚 OAuth 但在 Android 上则不行 由于某种原因 我们没有得到 oauth verifier 其中包含 Android 设备上 StageWebView 中
  • Kotlin 中从 String 到 List 的 jOOQ 转换器

    我正在处理一种罕见的情况 我发现将 JSON 存储在 RDBMS 字段中是可以接受的 JSON 文档是一个数组或键值对象 So the jOOQ转换器 https www jooq org doc 3 11 manual code gene
  • 我无法将 jsPDF 与 Angular 10 一起使用

    我试图使用打印我的页面jspdf图书馆 我已经尝试了很多解决方案来完成这里的示例和几乎每个谷歌建议链接 但我仍然无法修复它 这是我到目前为止所尝试过的 import as jsPDF from jspdf openPDF void cons
  • 提供通过 Node.js 中的链接标签链接到 HTML 文件的 CSS 样式表,无需框架

    我一直通过反复试验的方式自学 Node js 我使用 Node js HTTP 类构建了一个简单的服务器 我发现我可以异步读取文件并使用异步服务提供数据fs readFile cbk 回调方法 目前我不明白的是如何响应请求所需的所有其他资源