【问题标题】:Unable to send form data into MongoDB database using Node.js无法使用 Node.js 将表单数据发送到 MongoDB 数据库
【发布时间】:2019-04-30 16:57:13
【问题描述】:

所以多年来我一直试图从我的表单中获取数据并将其输入到我的数据库中,但它只是无法正常工作。没有错误,也没有任何记录。

这是我的 HTML 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta charset="UTF-8">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="css/bootstrap.min.css">

    <title>Signup for NGOs</title>
</head>
<body>
    <form class="mt-4 mr-4 ml-4" id="form" method="post">
        <div class="form-group">
            <label for="name">Name</label>
            <input type="name" class="form-control" id="name" aria-describedby="emailHelp" placeholder="Enter name of NGO">
        </div>
        <div class="form-group">
            <label for="address">Address</label>
            <input type="text" class="form-control" id="address" placeholder="Address">
        </div>
        <div class="form-group">
            <label for="phone">Contact Information</label>
            <input type="number" class="form-control" id="phone" placeholder="Contact Number">
        </div>
        <div class="form-group">
            <label for="requirements">Requirements (Seperate by Commas)</label>
            <input type="text" class="form-control" id="requirements" placeholder="Requirements">
        </div>
        <button type="submit" class="btn btn-primary" id="submitButton">Submit</button>
    </form>

    <!-- Optional JavaScript -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script type="text/javascript" src="signup.js"></script>
</body>
</html>

这是我的 Node.js 代码:

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;

var app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.resolve(__dirname, 'public')));

// I've replaced my original username and password with placeholders
var uri = "mongodb+srv://username:password@helpbook-rlpsi.gcp.mongodb.net/test?retryWrites=true";

var dbConn = MongoClient.connect(uri, { useNewUrlParser: true });
app.post('/signup', function (req, res) {
    dbConn.then(function(db) {
        delete req.body._id; // for safety reasons
        dbConn.db("NGOs").collections("partners").insertOne(req.body);
        console.log('test');
    });
});

我不知道出了什么问题。我的数据没有上传到数据库,并且由于某种原因没有执行任何 console.log() 语句。

【问题讨论】:

  • 您能否在dbConn.then 之前进行控制台登录并检查req.body 是否存在?如果不是,请在您的表单中使用enctype="application/x-www-form-urlencoded"
  • 不。我都试过了,仍然没有变化。什么都没有打印出来。

标签: javascript node.js html mongodb bootstrap-4


【解决方案1】:

promise 可能在注册处理程序被调用之前解决。

尝试以下方法:

var dbConn = MongoClient.connect(uri, { useNewUrlParser: true });
dbConn.then(function(client) {
    app.post('/signup', function (req, res) {
        delete req.body._id; // for safety reasons
        client.db("NGOs").collections("partners").insertOne(req.body);
        console.log('test');
    });
})
.catch(function(err){
    console.log(err)
});

【讨论】:

  • 我试过了,我的终端仍然没有打印任何东西。它只是停留在节点 signup.js 上。之后什么也没有发生。我将 req.body 更改为 {name: "john"} 只是想看看这是否会有所不同,但实际上并没有。
  • 新假设,改变了我的答案。
  • 试过这个。什么都没有打印出来。我什至试图打印出 req.body 但没有打印出来。
  • 您确定表单确实在提交?我看到您的表单上没有定义任何操作属性。尝试在 HTML 中将 action="/signup" 添加到表单中
【解决方案2】:

具体查看您的问题,您没有在表单中使用任何action

<form class="mt-4 mr-4 ml-4" id="form" method="post" action="/signup">
...
</form>

所以它不会发布到您的路线上。 (这就是为什么我专门询问 dbconn 之前的控制台日志是否正常工作)

【讨论】:

    猜你喜欢
    • 2019-08-02
    • 2016-03-23
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2019-09-18
    相关资源
    最近更新 更多