Как вы используете нативный, экспресс и парсер mongodb для отправки запроса и сохранения данных? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытался сохранить данные в базе данных mongodb, но ничего, что я делаю, похоже, не работает.первая ошибка, которую я получаю, связана с req.body

Когда я нажимаю кнопку отправки, console.log(req.body) возвращает

[Object: null prototype] { name: 'John', priority: 'go to bed' }

вместо

{ name: 'John', priority: 'go to bed' }

Во-вторых, я не знаю, правильно ли я сохраняю данные в базе данных, потому что я видел так много разных способов сделать это, что я запутался

Соответствующая строка кода

db.collection.insertOne(req.body);

и соответствующая ошибка:

TypeError: db.createCollection is not a function

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });

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

// Connection URL
const url = "mongodb://localhost:27017";

app.listen(7000);


app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
})

app.post('/todo',urlencodedParser,function(req, res){

    MongoClient.connect(url, { useNewUrlParser: true }, function(err,db){
        if(err) throw err;
        console.log('Databese created!');
        db.collection.insertOne(req.body);
        db.close();
    });
    console.log(req.body);
});
<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        I am an index page.

        <form class="" action="/todo" method="post">
            <input type="text" name="name" placeholder="todo">
            <input type="text" name="priority" placeholder="priority">
            <button type="submit">Submit</button>
        </form>
    </body>
</html>

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Относительно первой ошибки . Вы должны добавить эти две строки, чтобы получить данные json в качестве объекта запроса, поскольку вы отправляете данные в формате json

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

Относительно второго запроса: Вставка записи в mongoDB

MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      var myobj = { name: "Company Inc", address: "Highway 37" };
      dbo.collection("customers").insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log("1 document inserted");
        db.close();
      });
    });
0 голосов
/ 13 февраля 2019

Ваша проблема в том, что вы не указываете своему экземпляру MongoDB, какую базу данных вы используете.

const url = "mongodb://localhost:27017/myDataBaseName";

Это должно решить эту проблему для вас.

...