javascript - CSS 和 JS 未在 Node.js 服务器上加载
问题描述
我刚刚开始学习 Node.js,我编写了最简单的服务器,如下所示:
// workspace
const p = document.querySelector('p');
p.textContent = 'aleluja';
html {
font-size: 10px;
}
body {
font-size: 2rem;
}
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Go go go</title>
<link href="sheet1.css" rel="stylesheet">
<script src="main.js" async></script>
</head>
<body>
<p>something</p>
</body>
</html>
和服务器:
const http = require('http');
const fs = require('fs');
const hostname = '127.0.0.1';
const port = 3000;
fs.readFile('index.html', (err, html) => {
if (err) {
throw err;
}
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-type', 'text/html');
res.write(html);
res.end();
});
server.listen(port, hostname, () => {
console.log('started');
});
})
我的问题是我第一次运行此代码时运行良好 - css 和 js 加载没有问题。但后来我在同一台服务器上同时试验了 PHP 和 Node.js(使用 nginx)。我失败了,因为我不太需要它(这只是为了好玩)我放弃并更改了所有更改以实现此目标设置(如 nginx-conf 中的端口)。然后,在尝试再次运行此代码后,它不会加载 sheet1.css 和 main.js。为什么会这样?我把所有设置都转回了默认状态?
感谢您的回答。
解决方案
这是您的服务器逻辑:
const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-type', 'text/html'); res.write(html); res.end(); });
浏览器要求/
,服务器给它html
变量的值。
浏览器要求/sheet1.css
,服务器给它html
变量的值。
浏览器要求/main.js
,服务器给它html
变量的值。
您需要注意req
对象中的 URL 并将其要求的内容提供给浏览器,而不是盲目地发送html
无论要求什么。
请注意,您还需要设置正确的Content-Type
响应标头。
(您可能还应该避免重新发明轮子并使用Express.js及其为此设计的静态模块)。
我的问题是我第一次运行此代码时运行良好 - css 和 js 加载没有问题。
这不可能发生。index.html
可能您从URL加载file:
并完全绕过服务器。
推荐阅读
- c# - Linq 加入到与 Entity Framework Core 的 1:n 关系
- javascript - 未捕获的类型错误:迭代项目列表时无法读取未定义的属性“forEach”
- android - 当我尝试添加 firebase auth 时,Flutter 停止工作
- mysql - Phpmyadmin #1064 您的 SQL 语法有错误;
- python - 以管理员身份从 cmd 运行 python 文件(不更改代码)
- python - pytube ValueError:解包的值太多(预期为 2)
- python - 字典到 dask 数据框
- javascript - 调用await jquery.ajax时如何获取数据、textStatus和jqXHR?
- java - 使用 java 数组在输出中显示多个答案
- javascript - 使用 filesaver.js 下载画布时,画布内的图像未显示