Итак, я пытался получить данные из моей формы и ввести их в свою базу данных целую вечность, но это просто не работает. Ошибок нет и ничего не логируется.
Это мой 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 () не выполняется.
Неа. Я попробовал оба, но изменений все равно не было. Ничего не печатается.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обещание, вероятно, разрешается до того, как будет вызван обработчик регистрации.
Попробуйте следующее:
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"}, просто чтобы посмотреть, имеет ли это значение, но это не так.
Новая гипотеза изменила мой ответ.
Пробовал это. Ничего не напечатано. Я даже пытался распечатать req.body, но ничего не получилось.
Вы уверены, что форма действительно отправляется? Я не вижу свойства действия, определенного в вашей форме. Попробуйте добавить action = "/ signup" в свою форму в HTML.
Если посмотреть конкретно на ваш вопрос, вы не используете action в своей форме.
<form class = "mt-4 mr-4 ml-4" id = "form" method = "post" action = "/signup">
...
</form>
Таким образом, он не будет размещен на вашем маршруте. (Вот почему я специально спросил, работает ли логирование консоли до того, как dbconn работает или нет)
Можете ли вы войти в консоль перед
dbConn.thenи проверить, существует лиreq.body? если нет, возможно, используйтеenctype = "application/x-www-form-urlencoded"в своей форме