首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web应用程序中普通JavaScript与Node.js JavaScript的结合

Web应用程序中普通JavaScript与Node.js JavaScript的结合
EN

Stack Overflow用户
提问于 2022-11-10 22:18:28
回答 2查看 46关注 0票数 0

你好,我正在尝试设计一个非常简单的Express.js web应用程序,它只发送您提交给服务器端的电子邮件地址。但是,当我尝试将普通JavaScript (如querySelector)与包含Express.js内容的代码组合起来时,它就无法工作,并且会崩溃,说明没有定义document.getElementById("email")中的document。请问有什么办法可以做到吗?或者如何正确地将数据从客户端发送到服务器端,反之亦然?

这是我在web开发中的第一个非常简单的项目,所以代码不是最好的。

JavaScript码

代码语言: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代码

代码语言:javascript
复制
<!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>

错误消息:

代码语言:javascript
复制
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...
EN

回答 2

Stack Overflow用户

发布于 2022-11-13 10:25:29

Express和Node.js是无法访问DOM或文档的服务器环境。如果要检查JavaScript是否在HTML中工作,请尝试使用浏览器的控制台(在正在使用的浏览器上按f12,然后单击console)。

您可能希望将console.log与您正在做的操作一起使用,只是为了检查您所做的工作是否有效,因为如果您保存它(如果您使用Vscode中的实时服务器扩展),它将显示在浏览器的控制台上。

票数 1
EN

Stack Overflow用户

发布于 2022-11-10 22:55:08

因为NodeJS和Express是服务器端的,所以不能在nodeJS文件中运行普通的JS。

您应该做的是获取普通的JS代码,并将其放入单独的JS文件(即script.js)中。不要担心,您不需要将index.js链接到HTML。只要在命令行中运行node index.js,服务器就会启动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74395936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档