提供通过 Node.js 中的链接标签链接到 HTML 文件的 CSS 样式表(不带框架)

Posted

技术标签:

【中文标题】提供通过 Node.js 中的链接标签链接到 HTML 文件的 CSS 样式表(不带框架)【英文标题】:Serving CSS stylesheets that are linked to HTML files via the link tag in Node.js w/o a framework 【发布时间】:2020-06-13 04:19:40 【问题描述】:

我一直在通过反复试验自学 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)。我宁愿在没有 3rd 方软件/工具/框架等的情况下执行此操作...

【问题讨论】:

【参考方案1】:

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

nodejs 服务器,就像您创建的一样,默认情况下不提供任何文件。它仅提供您对其进行编程以提供服务的文件。因此,您的 nodejs 服务器被编程为只做一件事和一件事,那就是发送index.html,无论从它请求什么 URL。

所以,这就是发生的事情:

    用户为您的网站输入了一些 URL 浏览器向您的服务器发送对该页面的请求 您的网络服务器提供index.html 浏览器解析index.html 并找到样式表链接 浏览器向您的服务器发送样式表链接请求 您的服务器发送它index.html 浏览器意识到“这不是样式表”,而您没有样式

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

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

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

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

【讨论】:

天哪!这个答案太好了。谢谢老兄,这超出了我的预期。【参考方案2】:

因为您的服务器端代码被编写为处理 all.http 请求并提供相同的 html 内容,而不管路径如何。

尝试在处理程序中添加一些 if-else 逻辑,并根据请求路径传递适当的文件。

类似:

if(req.path === "" || req.path === "index.html")
     fs.read htnl file here
else if (req.path==="my.css")
     fs.read css file

学习使用浏览器开发工具 (F12),它可以准确显示浏览器发出的请求、发送的内容、返回的内容 - 等等。

【讨论】:

仅供参考,req.path 在使用 OP 显示的普通 HTTP 服务器时不是有效属性。您必须直接使用req.url 或对其进行解析以删除查询字符串等内容。 谢谢。我是凭记忆打字的。我试图引诱他自己去发现这些东西。如果将完整的解决方案交给他,他将永远学不会。很明显,他是个初学者。 但是,显然,您的回答更详细。来自我的 +1。

以上是关于提供通过 Node.js 中的链接标签链接到 HTML 文件的 CSS 样式表(不带框架)的主要内容,如果未能解决你的问题,请参考以下文章

将 Google 域链接到 Amazon ec2 服务器

我的 Anchor 标签重定向到我自己的 Wordpress 网站/“我在标签中提供的链接”

通过 NODE JS & express & jquery 向任何 API 提交请求后,在 HTML 中打印 var 值

Node.js 源码分析

#yyds干货盘点#node.js链接MongoDB数据库

如何使用 node.js 和 javascript 模仿 Facebook 的“链接共享”功能