【问题标题】:Passing data from input to MySQL by using Express and POST request使用 Express 和 POST 请求将数据从输入传递到 MySQL
【发布时间】:2018-11-22 11:47:46
【问题描述】:

这是我的 HTML 和 Express 代码的 sn-p:

<!DOCTYPE html>
 <html lang="en">
 <head>
    <meta charset="UTF-8">
    <title>TEST</title>
 </head>
 <body>
    <form action="http://localhost:3000/tools" method="POST">
        <p>
            Set name: <input type="text" name="set_name">
        </p>
        <p>
            Description: <input type="text" name="description">
        </p>
        <input type="submit" value="Submit">
    </form>

 </body>
</html>

和快递:

const express = require('express');
const mysql = require('mysql');
const bodyParser = require('body-parser');

const {parse}=require('querystring'); 
const connection = mysql.createConnection({
    host: '127.0.0.1',
    user: 'root',
    password: '',
    database: 'toolscatalog'
});
const app = express();
const urlParser=bodyParser.urlencoded({extended:false});

function dbConnection(SQLquery, result) {
    connection.connect();
    connection.query(SQLquery, (error, results) => {
    if (error) throw error;
    result.send(results);
    console.log(results);
    });
    connection.end();
}

app.route('/tools')
    .get((req, res) => {
    dbConnection('SELECT * FROM tools', res);
    });

app.post('/tools',urlParser, (req, res) => {
    const set_name = req.body.set_name;
    const desc = req.body.description;
    console.log(set_name, desc);     //console: undefined undefined
    dbConnection(`INSERT INTO tools(set_name,description) VALUES (${set_name}, ${desc})`, res);
});

app.listen(3000, function () {
    console.log('listening on: 3000')
});

MySQL 列是

  • id - 自动递增不为空,
  • set_name varchar,
  • 描述 varchar。

似乎提交表单后,服务器上的bodyParser无法读取表单中的数据。 Console.log 给出了 namedesc 变量的 undefined 值。 如何将信息从输入传递到 DB?

另一个问题是 GET 请求。运行服务器后的第一个请求工作正常。从数据库获取数据的第二次请求返回错误并导致服务器崩溃。

【问题讨论】:

  • 你是发送 first_namelast_name 请求参数在 post 中,你期望如何得到 set_namedescription ? , 做console.log(req.body) 你会看到的。
  • 我解决了这个问题,但没有任何改变。还是同样的问题。

标签: javascript mysql express put


【解决方案1】:

我终于找到了我的问题的答案。 SQL 查询中的 ${set_name} 和 ${description} 应作为字符串值在引号中传递,即“${set_name}”和“${description}”。

【讨论】:

  • 确保您阅读了有关如何正确转义用户输入的库。如果您只是获取用户提交的内容并将其插入到 SQL 中,您可能会面临 SQL 注入攻击。例如,如果我将工具描述设为'1'); DROP TABLE tools;,我可能会删除您的整个工具表。人们还使用 SQL 注入从数据库中窃取数据。基本上每个 sql 查询库都有方法让您安全地传递用户提交的值而不必担心注入。
猜你喜欢
  • 2020-06-16
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2018-02-15
  • 2016-03-01
相关资源
最近更新 更多