javascript - 如何编写带有脚本的 html 页面以在 node.js 中进行响应?

标签 javascript node.js

我是 node.js 的新手。我正在尝试向响应写入一个名为 index.html 的 html 文件它引用了一个 javascript 文件 test.js :

<!-- Content of index.html -->
<html>
  <head>
    <script src="test.js"></script>
  </head>

  <body>
    <h2>Hello</h2>
  </body>
</html>

我的test.js里面只有一行

console.log("asdf")

现在,使用node.js来显示index.html , 我写了以下 main.js

let http = require("http")
let fs = require("fs")
let hostname = "127.0.0.1"
let port = 3000

let server = http.createServer((request, response) => {
  fs.readFile("./index.html", (error, html) => {
    response.statusCode = 200;
    response.setHeader("Content-Type", "text/html")
    response.write(html)
    response.end()
  })
})

我输入了 node main.js在终端中,输入 http://127.0.0.1:3000/在浏览器中。控制台显示异常说

Uncaught SyntaxError: Unexpected token <

原来浏览器得到了test.js错误的。如下图所示,浏览器似乎认为text.js包含 index.html 的内容.

enter image description here

出了什么问题?

所有提到的文件都按以下方式组织:

.
├── index.html
├── main.js
└── test.js

最佳答案

无论浏览器要求什么,您的服务器都会发送 index.html 的内容。下面是一个详细的示例,说明您可能希望如何处理 index.htmltest.js 的请求。

let server = http.createServer((request, response) => {
  if(request.url === '/' || request.url === '/index.html') {
    fs.readFile("./index.html", (error, html) => {
      response.end(html);
    });
  } else if(request.url === '/test.js') {
    fs.readFile("./test.js", (error, js) => {
      response.end(js);
    });
  } else {
    response.end('idk what to send u, sowie');
  }
});

如您所见,有些代码重复了!您可以将代码重构为“请尝试向他们提供他们所要求的确切文件;如果我在读取文件时遇到错误,则该文件一定不存在,因此我将向他们发送 404 响应。”

关于javascript - 如何编写带有脚本的 html 页面以在 node.js 中进行响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316804/

相关文章:

javascript - Bootstrap 3 导航栏折叠

javascript - 如何使用 JQuery 或 Javascript 添加只读属性(但遵循 W3C 标准!)

javascript - 将多个文件注入(inject)书签

javascript - Angular gulp - 如何根据每个 src 文件夹拆分 dist 文件夹中的 js 文件

javascript - 接受 POST 请求的 Node.js 服务器

javascript - 如何向 CSS Accordion 添加加减号

javascript - 使用事件监听器向上冒泡或向下传播时,为什么我看不到多个 console.log() 操作?

mysql - Docker + fig/compose + nginx + node.js + mysql + redis

mysql - 如何在 node.js 中使用 sequelize 从旧数据库重新创建数据库

node.js - Node8/Expresss 4 如何获取特定响应头属性的值?