невозможно преобразовать данные JSON из MongoDB в переменную, используемую в моем коде - PullRequest
0 голосов
/ 02 апреля 2019

Нужно получить данные из моего MongoDB и использовать в качестве переменной в моем веб-приложении, используя expressJS & mongoose. Когда я запрашиваю все данные с помощью функции find (), я получаю эти данные как JSON без проблем. но теперь мне нужно иметь доступ к коллекции, так как я использую ее данные в качестве переменной в моем проекте. Пожалуйста, помогите мне, я знаю, что что-то упустил.

router.get('/support', (req, res) => {

Message.find()
.then(messages => {
    res.json({
        confirmation: 'success',
        data: messages
    })
})
.catch(err => {
    res.json({
        confirmation: 'fail',
        message: err.message
    })
})
});

Ответы [ 4 ]

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

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

router.get('/support', (req, res) => {
    Message.find({})
    .then(messages => {
        res.render("support", {messages}); // I rendered the template 
})
    .catch(err => {
        res.json({
            confirmation: 'fail',
            message: err.message
        })
    })   
});

и затем в своем файле EJS я просто добавил его

<p><%= messages[0].sender %></p>

Это сработало для меня

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

Попробуйте это:

router.get('/support', (req, res) => {

Message.find({}).exec()
.then(messages => {
    res.json({
        confirmation: 'success',
        data: messages
    })
})
.catch(err => {
    res.json({
        confirmation: 'fail',
        message: err.message
    })
})
});

Первое: добавьте {} в качестве критерия запроса. Может быть, Мангуста примет пустой аргумент, но я не уверен, как он справится с этим (я не вижу упоминаний в документации о таком синтаксисе).

Второе: findOne не возвращает обещание. Результат запроса имеет удобный then метод, но я не уверен насчет catch. Вы должны выполнить exec(), чтобы получить обещание JS.

Запросы не являются обещаниями

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

Комментарий Марцина будет работать нормально, или, если вам не нужны все свойства, которые вы считаете, вы можете отправить только это:

 res.json({
    confirmation: 'success',
    message: messages.body,
    sender: messages.sender
 })
0 голосов
/ 02 апреля 2019

Вероятно, это потому, что у вас есть

Message.find()

вместо

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