使用 NodeJS Express 时将表单数据插入 MySQL 数据库

Posted

技术标签:

【中文标题】使用 NodeJS Express 时将表单数据插入 MySQL 数据库【英文标题】:Inserting form data into MySQL database when using NodeJS Express 【发布时间】:2018-10-31 01:44:59 【问题描述】:

对于一个学校项目,我需要将 html 表单中的数据插入到我的数据库中。问题是,我以前从未使用过 NodeJS、Express、Handlebars 或 javascript,而且我似乎无法弄清楚它是如何工作的,我目前在我的 .hbs 文件中有这个表单

<div class="row">
    <form action="" method="post" class="col s12">
    <div class="row">
        <div class="col s3 offset-s1">
            <label>Sensor Type</label><br>
            <label>
                <input id="combo" class="with-gap" name="sensorType" type="radio"/>
                <span>Temperature & Humidity</span>
            </label><br>
            <label>
                <input id="temp" class="with-gap" name="sensorType" type="radio"/>
                <span>Temperature</span>
            </label><br>
            <label>
                <input id="humid" class="with-gap" name="sensorType" type="radio"/>
                <span>Humidity</span>
            </label>
        </div>
    </div>
    <div class="row">
        <div class="input-field col s3 offset-s1">
            <select id="sensorForest">
                <option value="" disabled selected>Choose your forest</option>
                <optgroup label="The Netherlands">
                    <option value="streekbos">Streekbos Bovenkarspel</option>
                </optgroup>
                <optgroup label="United States of America">
                    <option value="losAngeles">Los Angeles National Forest</option>
                </optgroup>
            </select>
            <label>Forest</label>
        </div>
        <div class="input-field col s3">
            <textarea id="textarea2" class="materialize-textarea" data-length="50"></textarea>
            <label for="textarea2">Enter sensor Location</label>
        </div>
    </div>
    <div class="row">
        <div class="input-field col s6 offset-s1">
            <div class="input-field col s6">
                <input id="latitude" type="text" class="validate">
                <label for="latitude">Latitude</label>
            </div>
            <div class="input-field col s6">
                <input id="longitude" type="text" class="validate">
                <label for="longitude">Longitude</label>
            </div>
        </div>
    </div>
    <div>
        <div class="row">
            <div class="col s12 offset-s1">
                <button class="btn waves-effect waves-light" id="submit">Submit
                    <i class="material-icons right">send</i>
                </button>
            </div>
        </div>
    </div>
    </form>
</div>

我还设法使用以下脚本提取表单中字段的值,但我认为我不能使用它,因为我必须使用 NodeJS

<script>
var submit = document.getElementById("submit");

submit.onclick = function () 
    //var sensorType = document.getElementById("sensorType").value;
    var sensorForest = document.getElementById("sensorForest").value;
    var sensorLocation = document.getElementById("textarea2").value;
    var latitude = document.getElementById("latitude").value;
    var longitude = document.getElementById("longitude").value;

    console.log(sensorForest, sensorLocation, latitude, longitude);
;
</script>

有谁知道我应该如何将数据发送到我的数据库或知道一个很好的教程来解释我如何做到这一点?

谢谢

【问题讨论】:

【参考方案1】:

在您将任何内容保存到数据库之前,您必须先将其发送到您的服务器。我建议使用内置的fetch,或者如果您想要更好的浏览器支持,请使用axiosrequest-promisesuperagent。所有这些包都可以在npm上找到

客户

在您的点击处理程序下方

fetch('http://localhost:3000/sensors', 
  method: 'POST',
  headers: 
    'content-type': 'application/json'
  ,
  body: JSON.stringify(
    sensorForest,
    sensorLocation,
    latitude,
    longitude,
  )
)
.then(function (results) 
  return results.json()
)
.then(function (results) 
  console.log('got results', results)
)
.catch(function (ex) 
  console.error(ex)
)

依赖关系

npm init -y && npm i --save express body-parser

服务器

const express = require('express')
const  json  = require('body-parser')

const app = express()

const PORT = process.env.PORT || 3000

app.post('/sensors', json(), (req, res, next) => 
  const body = req.body
  // ...save `body` to database
  // use mysql, sequelize, or knex
  res.send(body)
)

app.listen(PORT, () => console.info(`Server listening on port "$PORT"`))

【讨论】:

【参考方案2】:

不,您不需要 ORM 库。你可以只使用来自 npm 的 mysql 包

【讨论】:

【参考方案3】:

要将您的 NodeJS/ExpressJS 应用程序连接到数据库(mongodb、mysql、...),您需要一个 ORM 库。对于您的情况,我建议 Sequelize。所有信息http://docs.sequelizejs.com/

【讨论】:

以上是关于使用 NodeJS Express 时将表单数据插入 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Express nodejs不使用带表单数据的mongoose插入数据

使用护照使用 NodeJs mongodb(mongoose) express 的注册表单

插入并放入nodeJs + express api时,带有Redux Saga的Axios不发送表单数据

使用Express将表单数据导入mongoDB数据库

nodejs中使用express和passport和mongodb的简单登录页面

使用 Express 获取表单数据到 mongoDB 数据库