Node.js - 静态文件被替换为 HTML 代码

Node.js - static files are getting replaced with HTML code

问题

我刚开始 Node.js 我的计划是首先设置一个服务器,其中包含一些基本 HTML 和静态文件 (css,js)。

但是当我尝试使用 express.js 甚至不使用 express 来提供静态文件时,js/css 代码正在从我的 index.html 代码中替换。 没有 Node.js 一切似乎都工作正常我什至在 python 中用烧瓶尝试过它也工作得很好。

这有什么共同的原因吗?

Node.js代码

    var http = require("http");
    var fs = require("fs");
    var express = require("express");

    var app = express();
    app.use("/", express.static("public"));

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

图片

因此,即使您使用 express 来提供静态文件,您也没有使用 express 作为服务器,而是创建了一个手动服务器来为每个文件提供 index.html请求。

http
  .createServer(function(req, res) {
    fs.readFile("index.html"....);
  })
  .listen(8080);

这段代码的意思是创建一个服务器,并为每个请求读取index.html文件并提供这个

所以当请求是 http://localhost:8080/css.css 时它不会歧视。

我建议多阅读一些有关在节点中创建服务器的内容。但解决方案是使用 express 作为服务器。

var http = require("http");
var fs = require("fs");
var express = require("express");

var app = express();
app.use("/", express.static("public"));

app.listen(8080, ()=>{
    console.log('Server started');
})

如果 index.html 在名为 PUBLIC

的文件夹中,这将正常工作

来自doc,

For example, use the following code to serve images, CSS files, and JavaScript files in a directory named public:

app.use(express.static('public'))

Now, you can load the files that are in the public directory:

请注意,如果您的文件位于项目根目录中,您可以使用:

app.use("/", express.static("."));