Не удается вставить в атлас mongoDB с Node.js и Express. js - PullRequest
0 голосов
/ 15 января 2020

Я сейчас пытаюсь выучить mongoDB, я делаю это впервые, и я застрял.

В моем файле индекса. js, где находятся все мои конфигурации NodeJs. Я успешно установил соединение с БД, но не могу вставить данные пользовательских входных данных из HTML.

Вот индекс. Файл js:

const path = require("path");

const MongoClient = require("mongodb").MongoClient;

const bodyParser = require("body-parser");

const express = require("express");

const app = express();

app.use(bodyParser.json());
app.use(
  bodyParser.urlencoded({
    extended: true
  })
);

const port = 8080;

const uri =
  "mongodb+srv://mongodbURI";
const client = new MongoClient(uri, { useNewUrlParser: true });

app.get("/", (req, res) => {
  res.sendFile(path.join(__dirname, "index.html"));
});

app.post("/new", (req, res) => {
  let myObj = [
    {
      name: req.body.usrName,
      email: req.body.usrMail,
      age: req.body.usrAge,
      password: req.body.usrPassword
    }
  ];
  client.connect(err => {
    const collection = client.db("GetForm").collection("UserData");
    collection.insertOne(myObj, function(err, r) {
      console.log("Added a user");
      res.redirect("/");
    });
    client.close();
  });
});

app.listen(port, () => {
  console.log(`Server Runing On Port ${port}`);
});

А вот и мой индекс. html Форма:

<form
 action="/new"
 method="POST"
 enctype="application/x-www-form-urlencoded"
>
  <label for="usrName">Name: </label>
  <input type="text" name="usrName" id="usrName" />
  <label for="usrMail">Email: </label>
  <input type="email" name="usrMail" id="usrMail" />
  <label for="usrAge">Age: </label>
  <input type="number" name="usrAge" id="usrAge" />
  <label for="usrPassword">Password: </label>
  <input type="password" name="usrPassword" id="usrPassword" />
  <button type="submit">Add</button>
</form>

Буду рад, если кто-нибудь сможет мне помочь!

Ответы [ 2 ]

1 голос
/ 16 января 2020

Ваш текущий код имеет несколько проблем:

Рабочий код:

app.post("/new", (req, res) => {
    let myObj = {
        name: req.body.usrName,
        email: req.body.usrMail,
        age: req.body.usrAge,
        password: req.body.usrPassword
    };
    client.connect((err, db) => {
        if (err) {
            console.log("cannot connect db" + err);
            return;
        }
        console.log("DataBase connection made successfully");
        const collection = db.db().collection("UserData");

        collection.insertOne(myObj, function (err, r) {
            if (err) {
                console.log("cannot add obj");
                return;
            }

            console.log("Added a user");
            res.redirect("/");
        });
        client.close();
    });
});

Проблемы с кодом:

const path = require("path");

const MongoClient = require("mongodb").MongoClient;

const bodyParser = require("body-parser");

const express = require("express");

const app = express();

app.use(bodyParser.json());
app.use(
  bodyParser.urlencoded({
    extended: true
  })
);

const port = 8080;

const uri =
  "mongodb+srv://mongodbURI";
const client = new MongoClient(uri, { useNewUrlParser: true });

app.get("/", (req, res) => {
  res.sendFile(path.join(__dirname, "index.html"));
});

app.post("/new", (req, res) => {
  let myObj = [
    {
      name: req.body.usrName,
      email: req.body.usrMail,
      age: req.body.usrAge,
      password: req.body.usrPassword
    }
  ];
  client.connect(err => { // You've missing err check here, you need to return if there is an error.
    const collection = client.db("GetForm").collection("UserData"); 
    /** From above line db(GetForm) is not needed if you're connecting to GetForm, your url directly connects to database :: GetForm as it ends with /GetForm.
        Also other major issue is MongoDB driver would give you client on `client.connect` function, So to access database you need to do client.db() */
    collection.insertOne(myObj, function(err, r) {
      console.log("Added a user");
      res.redirect("/");
    });
    client.close();
  });
});

app.listen(port, () => {
  console.log(`Server Runing On Port ${port}`);
});
0 голосов
/ 16 января 2020

В конце я решил это с помощью @srinivasy и @tpikachu. Я изменил метод app.post с этого:

app.post("/new", (req, res) => {
  let myObj = [
    {
      name: req.body.usrName,
      email: req.body.usrMail,
      age: req.body.usrAge,
      password: req.body.usrPassword
    }
  ];
  client.connect(err => {
    const collection = client.db("GetForm").collection("UserData");
    collection.insertOne(myObj, function(err, r) {
      console.log("Added a user");
      res.redirect("/");
    });
    client.close();
  });
});

На это:

app.post("/new", (req, res) => {
  let myObj = {
    name: req.body.usrName,
    email: req.body.usrMail,
    age: req.body.usrAge,
    password: req.body.usrPassword
  };
  client.connect((err, db) => {
    if (err) {
      console.log("cannot connect db" + err);
      return;
    }
    console.log("DataBase connection made successfully");
    const collection = db.db().collection("UserData");

    collection.insertOne(myObj, function(err, r) {
      if (err) {
        console.log("cannot add obj");
        return;
      }

      console.log("Added a user");
      res.redirect("/");
    });
    client.close();
  });
});

И, к счастью, теперь он работает нормально! Спасибо за помощь, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...