使用 node.js 和 JavaScript 从 HTML 简单表单插入 MySQL 表



好吧,经过 3 天的努力,我陷入了困境,我只是感到完全不知所措。我觉得自己就像一个迷失在 Web 开发这个巨大而未知的世界里的小孩子(我是一名大型机开发人员),并开始感到非常沮丧,所以我决定寻求认真的帮助。我不会发布任何代码,因为它在任何程度上都没有帮助。

我想要但仍然无法实现的:

  • 输入">localhost:8080/datos.html",它有 2 个"文本框"和一个按钮。按下按钮后,我希望使用 Node.js 将 2 个文本框("名称"和"密码")的数据存储在 MySQL 数据库中。

情况如下:

  • 我使用的是Windows 7。
  • 节点.js安装在我的PC上,我可以在cmd中做"节点服务器.js" 终端和事情会正常工作。
  • 我可以在"服务器.js中连接到MySQL数据库并进行查询,结果没问题,我也可以插入,一切都很好。
  • 在同一个文件夹">example.js"文件中,我有一个名为">datos.html"的文件。
  • 使用"url 解析",我设法在浏览器 (chrome) 中编写"localhost:8080/datos.html",以便在通过 Node.js 启动"服务器.js后正确显示"datos.html"(2 文本框和按钮正确显示)。

现在问题开始了:我根本无法设法在MySQL 数据库中插入文本框的数据......正如我所说,通过服务器插入数据.js不是问题,从服务器.js"获取"带有"document.getElementByI()"的文本框值也不是问题。问题是,我找不到解决这个问题的方法。 我知道这可能是一个蹩脚的问题,并且正在考虑不做它,但是上帝,对于一个习惯了COBOL,JCL和CICS的人来说,Web开发太痛苦了。

作为参考,我阅读了W3Schools关于HTML,Ajax,Node.js的"教程"和指南,可以做那里显示的示例,但只是不能链接这些东西以使所有内容成为单一的功能。

请注意,我的问题不是">技术性的",我知道如何查询SQL表,或者"启动"节点(以基本的方式,tho),我知道如何制作(方式)简单的HTML并从node.js显示它;但问题是关于"如何做某事",这很简单,但我只是无法实现。

任何视频,手册,教程,课程或任何你必须帮助我实现这个简单的事情,将得到真正的赞赏。

你走在正确的轨道上。 为了实现预期目标,请执行以下操作。

1)你可以像杰森在上一个答案中提到的那样使用快递并处理一切 现在作为客户端和服务器在同一台机器上的应用程序进行测试,就像我在我的机器上所做的那样 应用程序,直到您准备好将客户端服务器与 彼此。

2)为了使用MySQL作为存储引擎,而不是我 使用 SqlLite 使用以下示例 https://www.w3schools.com/nodejs/nodejs_mysql_insert.asp

var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO customers (name, address) VALUES ('Company Inc', 'Highway 37')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted");
});
});

3)创建一个 HTML 文件来处理输入,如下所示

4)创建一个客户端.js文件,将请求发送到 NodeJS 服务器

5)创建服务器.js文件以接收请求并处理插入,在我的情况下使用SQLite

6)为了创建数据库,请在故障控制台中运行以下命令

~sqlite demo      <---demo is name of db in sqlite3
% create table userlist(user, password);
CTRL+D            <---exit

7)找到合适的在线资源需要一些努力,但我找到了一个可以编辑nodejs项目以供查看的地方

我找到了这个:https://flaviocopes.com/nodejs-hosting/并找到了一个名为Glitch的在线环境工具

试试我在 Glitch 构建的以下示例,单击绿色的"显示实时"按钮后,可以查看编辑并运行该示例。

https://glitch.com/edit/#!/node-js-demo-stack-overflow?path=public/client.js:1:0

客户端.js

// client-side js
// run by the browser each time your view template referencing it is loaded
console.log('Testing Add');
function submit()
{
// request the user from our app's sqlite database
const userRequest = new XMLHttpRequest();
userRequest.open('post', '/addUser');
userRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8")
userRequest.send(JSON.stringify({'user':document.getElementById("user").value, 'password': document.getElementById("password").value}));
}

索引.html

<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to Glitch!</title>
<meta name="description" content="A cool thing made with Glitch">
<link id="favicon" rel="icon" href="https://glitch.com/edit/favicon-app.ico" type="image/x-icon">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- import the webpage's stylesheet -->
<link rel="stylesheet" href="/style.css">

<!-- import the webpage's client-side javascript file -->
<script src="/client.js"></script>
</head>
<body>
<input type="text" id="user"/>
<input type="text" id="password"/> 
<button onclick="submit()">Send</button>
</body>
</html>

服务器.js

// server.js
// where your node app starts
// init project
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
//
// we've started you off with Express, 
// but feel free to use whatever libs or frameworks you'd like through `package.json`.
// http://expressjs.com/en/starter/static-files.html
app.use(express.static('public'));
// init sqlite db
var fs = require('fs');
var dbFile = 'demo';
var exists = fs.existsSync(dbFile);
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(dbFile);
// create application/json parser
var jsonParser = bodyParser.json();

// http://expressjs.com/en/starter/basic-routing.html
app.get('/', function(request, response) {
response.sendFile(__dirname + '/views/index.html');
});
// endpoint to addUser in the database
// currently this is the only endpoint, ie. adding dreams won't update the database
// read the sqlite3 module docs and try to add your own! https://www.npmjs.com/package/sqlite3
app.post('/addUser', jsonParser, function(request, response) {


// if ./.data/sqlite.db does not exist, create it, otherwise print records to console
if (!exists) {
console.log("Table not found");
db.run('CREATE TABLE userlist (user text, password text');
console.log('New table User List Created!');
insert(request);
}
else{
insert(request);
}
db.each('SELECT * from userlist', function(err, row) {
if ( row ) {
console.log('record:', JSON.stringify(row));
}
});
});
var insert = function (req)
{
db.run('INSERT INTO userlist (user, password) VALUES ("'+req.body.user+'","'+req.body.password+'")');
}

// listen for requests :)
var listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' + listener.address().port);
});

将其插入服务器中后处理程序的 else 块中.js在 insert(request) 下,以便能够发送回表值并在客户端中查看

db.all('SELECT * from userlist', function(err, rows) {
response.send(rows);
});

在客户端的提交函数中插入此内容.js以在提交时查看表值

userRequest.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var rows = JSON.parse(this.responseText);
var tbl = "<table border=1>";
tbl += "<thead><td>Name</td><td>Password</td></thead>";
for (var i = 0; i < rows.length; i++)
{
tbl+="<tr><td>"+rows[i].user+"</td><td>"+rows[i].password+"</td></tr>";
console.log('record:', JSON.stringify(rows[i]));
}
tbl += "</table>";
document.getElementById("tbl").innerHTML = tbl;
}
}

如果您还没有,您可能应该使用一个 Node 框架,该框架将用作传入请求的路由器。多年来最受欢迎的是快递。

https://expressjs.com/

完成此操作后,您将能够处理诸如

app.get("/datos", (req, res) => {
// Serve the form logic here
});
app.post("/datos", (req, res) => {
// Handle the form submission logic here
});

最新更新