require.js cannot be found, keep getting Uncaught SyntaxError: Unexpected token '<'

require.js cannot be found, keep getting Uncaught SyntaxError: Unexpected token '<'

我有一个非常简单的 nodeJS 项目,其结构如下:

Demo
    index.html
    server.js
    scripts
      require.js
      app.js

index.html

<html>
  <script src="scripts/require.js" data-main="scripts/app"></script>
  <body>
    <p>Press key to continue</p>
  </body>
</html>

server.js

const http = require("http");
const fs = require("fs");
const port = 5000;

const server = http.createServer((req, res) => {
  if ((req.url = "/")) {
    res.writeHead(200, { "Content-Type": "text/html" });
    fs.readFile("index.html", (error, data) => {
      if (error) {
        res.writeHead(404);
        res.write("Error: file not found");
      } else {
        res.write(data);
        res.end();
      }
    });
  }
});

server.listen(port);
console.log(`Node.js web server is running at ${port}`);

当我在 localhost:5000 上执行 node server.js 时,会显示一条 Press key to continue 消息,但我不断收到此错误消息,Uncaught SyntaxError: Unexpected token '<' 并且在开发人员控制台中 =>来源,require.js 文件没有任何内容。

我搜索了一下,我的结论是 require.js 无法正确定位文件。我找不到我的错误,有人可以帮忙吗?

有两个问题。首先,您尝试将服务器编码为仅响应路径为 / 的请求,而不响应其他请求。其次,你的if语句不正确,当你想比较(req.url === "/")时你做了赋值(req.url = "/")。

结果是此路由处理程序以相同方式响应任何请求,因此在请求 /scripts/require.js 时,您的服务器实际上会响应 index.html 文件。

您需要修复该 if 语句并添加另一个 if 语句来处理 /scripts/require.js.

的请求

由于您在 scripts 文件夹中组织 public 脚本,我建议为以 /scripts/ 开头的路径创建一个通用处理程序。这样的事情应该可以解决问题:

...
const server = http.createServer((req, res) => {
  if ((req.url === "/")) {
    ...
  } else if (/^\/?scripts\//.test(req.url) && req.url.endsWith(".js")) {
    fs.readFile(req.url, (error, data) => {
      if (error) {
        res.writeHead(404);
        res.write("Error: file not found");
      } else {
        res.writeHead(200, { "Content-Type": "application/javascript" });
        res.write(data);
      }
      res.end();
    });
  }
});
...