javascript - 从本地html表单插入文档时,MongoDB不显示console.log
问题描述
我试图仅使用 HTML 表单将文本数据输入到 MongoDB 数据库。但是当我在本地运行它时它不起作用。我认为这与创建 Node.js 服务器有关。但我不知道如何运行 HTML 文件(在index.html
此处)。我只学会了在 Node 控制台中单独运行 JavaScript 代码。我不知道如何在 NodeJS 上本地运行这个 index.html。
我也想在不使用 ExpressJS 的情况下做到这一点!我在网上找到的所有东西都只显示了如何使用 ExpressJS 来做到这一点。这背后有什么原因吗?我们不能只使用 NodeJS 和 MongoDB 来做到这一点吗?(本地在 Windows 上)
var MongoClient = require("mongodb").MongoClient;
var url = "mongodb://localhost:27017";
function addData(){
var record = document.getElementById("title").value;
MongoClient.connect(url, function (err, db) {
if (err) throw err;
var dbo = db.db("notetest");
var record2value = { title: record };
dbo.collection("page1").insertOne(record2value, function (err, res) {
if (err) throw err;
console.log("1 document added!");
db.close();
})
})
};
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script type="text/javascript" src="scripts/script.js"></script>
</head>
<body>
<form onsubmit="addData()">
<input type="text" name="title" id="title">
<input type="submit" name="submit" id="submit">
</form>
</body>
</html>
更新:我也尝试使用 Node.js 调用它index.html
。通过使用以下代码。
var http = require('http');
var fs = require('fs');
const PORT=8080;
fs.readFile('./index.html', function (err, html) {
if (err) throw err;
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
}).listen(PORT);
});
但我不知道为什么我没有看到console.log
来自 MongoDB 的内容,它应该说“添加了 1 个文档!”。
解决方案
到处都在使用 ExpressJS 来解决这个问题,因为我们需要一个 Web 服务器,它可以监听来自网络(本地或互联网)的调用并使其在服务器端易于理解。您自己运行了一个http
服务器,但您需要处理来自客户端 Web 的请求。由于您的目的,我们也需要快递。Express 还使用http
库来创建 Web 服务器,因此您无需担心所有这些东西。我不知道您对 express 的问题,但我建议使用 express 及其推荐的方法来解决此问题。
更新
本主题将帮助您仅使用 Node.js 创建 Web 服务器: 接受 POST 请求的 Node.js 服务器
创建一个名为server.js
并使用上述答案的文件来创建 http 服务器,然后使用node app.js
命令从终端运行它。(确保您的终端位于正确的目录中)
将您的数据库相关代码放在接受POST
方法下请求的部分中。
然后为您的 HTML 页面创建一个 javascript 文件并将其链接到您所知道的<script src="">...
并简单地使用fetch
API 来发送您刚刚运行的 http 服务器的请求。fetch
在这里阅读。
推荐阅读
- wordpress - WordPress 504 网关超时与 WooCommerce
- gpu - Google Colab 中的 High-Ram 是指 GPU RAM 还是 CPU RAM?
- postgresql - Postgres 查询任何数组
- sql - 根据值向上或向下舍入 SQL 列,并在末尾添加自定义字符串格式
- arrays - 计算两个日期之间的时间差 Numpy Python
- swiftui - PreferenceKey 协议中的 reduce(value:nextValue:) 函数有什么作用?
- laravel - Laravel 应用的 AliasMatch 和 DirectoryMatch
- java - 当你有 jdk 1.8 代码时,你如何执行 maven 的 spring-boot:run?
- reactjs - 在 javascript 中测试使用 Firebase Auth 的 React 应用
- python - AttributeError:模块'keras.utils.generic_utils'没有属性'populate_dict_with_module_objects'(将keras降级到2.2.4不起作用)