【问题标题】:Posting data from a html form to SQL does not post将数据从 html 表单发布到 SQL 不会发布
【发布时间】:2019-05-03 12:25:25
【问题描述】:

我有一个 node.js Web 应用程序、一个 SQL 服务器,并且我在 Visual Studio 代码中本地工作,然后同步到 azure。

我的主页上有一个简单的表单,当我点击发布时,应该将数据发送到我的 SQL 数据库中的表中。然而,什么都没有发生。我被重定向到用户页面,我没有收到任何错误,但控制台日志中也没有任何内容,或者发布到表中的任何内容。

这是我所拥有的:

app.js

var express = require('express');
var app = express();
var mysql = require("mysql");
var bodyParser = require('body-parser');

var config = {
      host: '',
      user: '',
      password: '',
      database: '',
      port: 3306,
      ssl: true
    };

var connection = new mysql.createConnection(config);

app.use('/node_modules',  express.static(__dirname + '/node_modules'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/Template/views/home.html',function(req,res){
  res.sendFile('home.html',{'root': __dirname + '/views'});
})

app.get('/Template/views/about.html',function(req,res){
  res.sendFile('about.html',{'root': __dirname + '/views'});
})

app.get('/Template/views/user.html',function(req,res){
  res.sendFile('user.html',{'root':__dirname + '/views'})
})

app.post('/Template/views/user.html', function(req, res){   
  var fName = req.body.first_name;
  connection.query("INSERT INTO `Persons` (name) SET ?", fName.toString(), function(err, result) { function(err, result) {
    if(err) throw err;
      console.log("1 record inserted");
    });
    res.send('user.html',{'root':__dirname + '/views'})
  });

app.listen(process.env.PORT);

home.html

<!DOCTYPE html>
<html lang="en">
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta name="description" content="">
      <meta name="author" content="">
      <title>Template</title>
      <link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    </head>
    <body>
      <form action="/Template/views/user.html" name="formA">
        First Name: <input type="text" name="first_name"> <br>
        Last Name: <input type="text" name="last_name"> <br>
        <input type="submit" value="submit">        
      </form>
    </body>
</html>

谁能看到我在这里做错了什么?

【问题讨论】:

  • 删除路由中的扩展。 app.get('/Template/views/user', ... 我还可以在您对query 的回调中看到一堆错误,不确定这是您的实际代码还是一些复制粘贴问题
  • 路由中的扩展似乎工作正常。您还可以看到哪些其他错误?谢谢

标签: javascript node.js azure


【解决方案1】:

定义连接后尝试连接:

connection.connect();

然后执行查询,最后关闭连接:

connection.end();

【讨论】:

  • 谢谢,我错过了这些。我现在至少收到一个错误“加载资源失败:服务器响应状态为 400 ()”
【解决方案2】:

在您的表单上添加 method='post'。

<form action="/Template/views/user.html" method='post' name="formA">

并更改服务器端代码

app.get('/Template/views/user.html',function(req,res){
  res.sendFile('user.html',{'root':__dirname + '/views'})
})

收件人:

app.post('/Template/views/user.html',function(req,res){
  res.sendFile('user.html',{'root':__dirname + '/views'})
})

然后像下面这样启动数据库连接。

var connection = new mysql.createConnection(config);
connection.connect();

【讨论】:

  • 当我添加 method='post' 时,我被重定向到地址栏中的正确地址,但页面只显示“此页面不工作 HTTP 错误 405”,但没有错误控制台。
  • 我进行了更新,但仍然遇到同样的错误。我不确定发生了什么。
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 2012-12-02
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多