javascript - 如何将整个 html 页面调用到请求处理程序 JavaScript 文件?
问题描述
我有一个带有 post 方法和文本区域字段的简单表单的 html 页面。我想用一个局部变量调用整个 html 页面,并使用 http write 方法将它返回给浏览器。这是html的代码片段。
<!DOCTYPE html>
<html id="upload-htm" lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload file</title>
</head>
<body>
<form action="/upload" method="post">
<textarea name="inpt-text" id="in-txt" cols="30" rows="10"></textarea>
<button type="submit">upload file</button>
</form>
</body>
<script src="./requestHandlers.js"></script>
</html>
然后我还有一个 requestHandler.js 文件。我的请求处理程序应该显示它对浏览器的响应。
function start(res) {
console.log("Request handler 'start' was called");
let body = document.getElementById('upload-htm');
res.writeHead(200, {
"content-type": "text/plain"
});
res.write(body);
res.end();
}
function upload(res) {
console.log("Request handler 'upload' was called");
res.writeHead(200, {
"content-type": "text/plain"
});
res.write(`Hello upload Mr. Paullaster`);
res.end();
}
export {
start,
upload
};
当我运行代码时,我从请求处理程序开始收到以下错误
PS C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive node> node -r esm
index.js
Response ready
Request for /upload recieved
About to route a request for /upload
Request handler 'upload' was called
Request for /start recieved
About to route a request for /start
Request handler 'start' was called
ReferenceError: document is not defined
at Object.start (C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive
node\requestHandlers.js:5:15)
at route (C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive
node\router.js:4:28)
at Server.onRequest (C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive
node\server.js:11:8)
at Server.emit (events.js:314:20)
at Server.EventEmitter.emit (domain.js:486:12)
at parserOnIncoming (_http_server.js:781:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:119:17)
PS C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive node>
解决方案
一个网站通常由两个主要部分组成,服务器端逻辑(后端)和客户端逻辑(前端)。两种逻辑通常彼此分开执行,因此只能通过网络通道进行通信,而不能通过逻辑进行通信。这意味着它们不会像传统的程序逻辑那样共享变量或数据。
从您共享的代码中,您似乎正在尝试在服务器端应用程序上执行客户端逻辑。JavaScript 中的document
对象用于访问和操作 HTML 页面中的 DOM。服务器端应用程序无权访问此document
对象,因此其访问权限无效。在服务器端应用程序的上下文中,文档对象是未定义的。
您可以通过客户端逻辑调用这些函数来完成这项工作。尝试注册一个函数调用以针对按钮单击进行上传和启动函数。这很可能会奏效。
推荐阅读
- android - 为什么 webView.setWebChromeClient(new WebChromeClient()); 导致屏幕变黑?
- react-native - 有没有办法使用 wix navigation expo react native
- swift - ImagePicker 错误:错误域 = PlugInKit 代码 = 13
- mysql - 如何在多个表上执行完全外连接
- node.js - 在使用 axios POST 请求发送数据以及在另一个微服务中获取/获取数据方面需要帮助
- javascript - 无法从数组(Javascript)中获取最小值?
- css - 获取 Chrome 开发工具设备模拟的宽度
- c# - 如何从 C# 中的 HTML 文件中检索特定表?
- css - 在 CSS Generated Content Module Level 3 中,生成的内容是否定义为显示在文档树上?
- node.js - NPM 运行 * 不执行任何操作