你好,我正在尝试设计一个非常简单的Express.js web应用程序,它只发送您提交给服务器端的电子邮件地址。但是,当我尝试将普通JavaScript (如querySelector)与包含Express.js内容的代码组合起来时,它就无法工作,并且会崩溃,说明没有定义document.getElementById("email")中的document。请问有什么办法可以做到吗?或者如何正确地将数据从客户端发送到服务器端,反之亦然?
这是我在web开发中的第一个非常简单的项目,所以代码不是最好的。
JavaScript码
const express = require("express")
const app = express();
const path = require("path")
app.use(express.static("./"))
app.listen(5000, () => {
console.log("Server listening on port 5000...")
})
app.get("/", (req, res) => {
res.sendFile("index.html", (err) => {
console.log(err)
})
})
let enterEmail = document.getElementById("email")
let submit = document.getElementById("submit")
let status = document.getElementById("status")
let email;
submit.addEventListener("click", (e) => {
email = enterEmail.value
enterEmail.value = ""
status.innerHTML = "Submitted email: " + email;
})HTML代码
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="./styles.css">
</head>
<body>
<input id ="email" placeholder="enter email" type="text"></input>
<input id="submit" type="submit">
<h1 id="status">Submitted email: </h1>
<script src="./index.js"></script>
</body>
</html>错误消息:
let enterEmail = document.getElementById("email")
^
ReferenceError: document is not defined
at Object.<anonymous> (C:\Users\Lenovo\Desktop\personal-projects\app.js:23:18)
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47
[nodemon] app crashed - waiting for file changes before starting...发布于 2022-11-13 10:25:29
Express和Node.js是无法访问DOM或文档的服务器环境。如果要检查JavaScript是否在HTML中工作,请尝试使用浏览器的控制台(在正在使用的浏览器上按f12,然后单击console)。
您可能希望将console.log与您正在做的操作一起使用,只是为了检查您所做的工作是否有效,因为如果您保存它(如果您使用Vscode中的实时服务器扩展),它将显示在浏览器的控制台上。
发布于 2022-11-10 22:55:08
因为NodeJS和Express是服务器端的,所以不能在nodeJS文件中运行普通的JS。
您应该做的是获取普通的JS代码,并将其放入单独的JS文件(即script.js)中。不要担心,您不需要将index.js链接到HTML。只要在命令行中运行node index.js,服务器就会启动。
https://stackoverflow.com/questions/74395936
复制相似问题