Невозможно отправить данные формы в базу данных MongoDB с помощью Node.js

Итак, я пытался получить данные из моей формы и ввести их в свою базу данных целую вечность, но это просто не работает. Ошибок нет и ничего не логируется.

Это мой 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:[email protected]/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.info('test');
    });
});

Я не знаю, что не так. Мои данные не загружаются в базу данных, и по какой-то причине ни один из операторов console.info () не выполняется.

Можете ли вы войти в консоль перед dbConn.then и проверить, существует ли req.body? если нет, возможно, используйте enctype = "application/x-www-form-urlencoded" в своей форме

Aritra Chakraborty 28.11.2018 18:58

Неа. Я попробовал оба, но изменений все равно не было. Ничего не печатается.

Ankit Sanghi 28.11.2018 20:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
380
2

Ответы 2

Обещание, вероятно, разрешается до того, как будет вызван обработчик регистрации.

Попробуйте следующее:

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.info('test');
    });
})
.catch(function(err){
    console.info(err)
});

Я пробовал это, но мой терминал по-прежнему ничего не печатает. Он просто застрял на узле signup.js. После этого ничего не происходит. Я изменил req.body на {name: "john"}, просто чтобы посмотреть, имеет ли это значение, но это не так.

Ankit Sanghi 28.11.2018 19:20

Новая гипотеза изменила мой ответ.

Dennis Ruiter 28.11.2018 19:40

Пробовал это. Ничего не напечатано. Я даже пытался распечатать req.body, но ничего не получилось.

Ankit Sanghi 28.11.2018 20:17

Вы уверены, что форма действительно отправляется? Я не вижу свойства действия, определенного в вашей форме. Попробуйте добавить action = "/ signup" в свою форму в HTML.

Dennis Ruiter 28.11.2018 20:23

Если посмотреть конкретно на ваш вопрос, вы не используете action в своей форме.

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

Таким образом, он не будет размещен на вашем маршруте. (Вот почему я специально спросил, работает ли логирование консоли до того, как dbconn работает или нет)

Другие вопросы по теме