Я застрял, пытаясь отправить данные с клиента на mongodb - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь передать данные из моего сервера app.js в файл базы данных, чтобы сохранить их в атласе MongoDB.

Я вижу, в чем проблема, я, честно говоря, просто не уверенкак это исправить?Проблема, кажется, состоит из двух частей.

1.) Я передаю функцию в .insertOne, а не объект, это приводит к ошибке обещания.Когда я пытаюсь что-то изменить в функции userDataFinal, я начинаю сталкиваться с ошибками области видимости и вещами, которые не определены.Я не совсем уверен, как это исправить.

2.) Мой код пытается создать новый документ, как только он запускается, потому что db.collection ('User'). InsertOne (userDataFinal);находится в функции обратного вызова .connect.

Мне нужно, чтобы этот код запускался только тогда, когда на стороне клиента был сделан запрос на размещение.

соответствующий код сервера app.js

const base = require('./base.js');

app.post('/',(req, res)=>{
    var userName = req.body;
    base.userDataFinal(userName);
    res.render('index');
});

Соответствующий код базы данных base.js

var userDataFinal = function getUserName(user){
    console.log(user);
}

module.exports = {userDataFinal};



////////////////////////////////////////////////////////////////////////


    // connects to the database
MongoClient.connect(URL, {useNewUrlParser: true}, (error, client)=>{
    if(error){
        return console.log('Could not connect to the database');
    }

    // creates a new collection 
    const db = client.db(database);

    // adds a document to the designated collection
    db.collection('User').insertOne(userDataFinal);


console.log('Database is connected...')
});

1 Ответ

0 голосов
/ 17 апреля 2019

Сначала вы передаете обратный вызов в функцию MongoClient.connect().Этот обратный вызов полезен, когда вы хотите убедиться, что вы подключены.

Как вы сказали, вы хотите, чтобы ваш код запускался только после выполнения запроса.Вы можете удалить вставку из соединения, но вы все равно можете сохранить часть обработки ошибок, так как всегда полезно знать, почему произошла ошибка соединения с БД.

Также вы вызываете метод mongo insertOne, что ожидает объект.Вы передаете ему функцию.

EDIT: Создайте переменную db вне всех ваших функций, затем назначьте ее из обратного вызова Mongo connect, как только у вас будет доступ к клиенту.Вы сможете использовать это db позже в маршрутах.

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

var db; // Will be set once connected

MongoClient.connect(URL, {useNewUrlParser: true}, (error, client)=>{
    if(error){
        return console.log('Could not connect to the database');
    }
    db = client.db(database);
    console.log('Database is connected...')
});

app.post('/',(req, res)=>{
    var userName = req.body.username;
    db.collection('User').insertOne({ username: userName });
    res.render('index');
});

Обратите внимание, что вы, вероятно, передаете userName через тело, в этом случае вам нужно получить его таким образом: req.body.username (если вы назвали связанный параметр тела username).

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