Файл сервера работает нормально локально, но после развертывания (на Heroku) MongoDB возвращает false вместо JSON. - PullRequest
0 голосов
/ 07 мая 2020

При попытке загрузить JSON данных из MongoDb в развернутой версии веб-сайта возвращается false. При локальном выполнении проблем нет. Проверка heroku logs в интерфейсе командной строки говорит мне, что в функции задач (расположенной в issues. js) она «не может прочитать свойство toArray () of undefined».

Есть три основных файла: сервер. js

'use strict';

const express = require('express'),
      app = express(),
      issues = require('./routes/issues'),
      users = require('./routes/users'),
      bodyParser = require('body-parser');


app.use(bodyParser.json());

// routing for issue management
app.get('/issues', issues.getAllIssues);
app.put('/issues/issues.json', issues.putNewIssue);
app.post('/issues/:issue_id.json', issues.postIssueUpdate);
app.delete('/issues/:issue_id.json', issues.deleteIssue);

// routing for user management
app.get('/users', users.getAllUsers);
app.put('/users/users.json', users.putNewUser);

app.get('/', (req, res) => {
    res.header('Content-Type', 'text/html');
    res.end('<h1>Issue Manager</h2>');
})

let port = process.env.PORT;
if (port == null || port =='') {
    port = 3000;
}

app.listen(port);

... функция из маршрутизации. js, которая дает «ложные» результаты

const im = require('issue_manager');

exports.getAllIssues = async (req, res) => {
    let allIssues = await im.issues();
    console.log(allIssues);
    console.log('Operation complete.');
    res.json(allIssues);
}

... модуль, выдает. js, который содержит клиент MongoDb и обрабатывает запрос

'use strict';

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

let db, allIssues; 

(async function() {
    const uri = 'censored';
    const dbName = 'IssueManager';
    let client;

    client = MongoClient.connect(uri, 
        { useNewUrlParser: true, 
          useUnifiedTopology: true })
                .then(data => {
                    return data;
                })
                .catch(err => {
                    return err;
                });

    try {
        db = (await client).db(dbName);
        allIssues = (await db).collection('Issues').find();
    } catch (e) {
        console.log(e);
    }
})();

exports.issues = async () => {
    try {
        return await allIssues
            .toArray()
            .then((data) => {
                return data;
            })
            .catch((err) => {
                return err;
            });
    } catch (e) {
        console.error(e);
        return false;
    }
}

1 Ответ

0 голосов
/ 07 мая 2020

Если ваш код работает нормально в вашей локальной среде, я думаю, вам следует:

  1. Подтвердить, что ваше развернутое приложение может подключаться к вашему серверу MongoDB.
  2. Если не может , убедитесь, что вы используете правильные переменные среды / учетные данные в развернутом приложении.

Это распространенная ошибка, с которой мы все сталкиваемся при развертывании. =)

...