Не могу подключиться к MongoDB в функциях Firebase - PullRequest
0 голосов
/ 27 февраля 2020

Я использую функции Firebase в качестве хоста для моего веб-приложения MERN. Когда я подключаюсь к MongoDB локально, он работает и может выполнять операции с базой данных. Однако, когда я развернул функции firebase, ему даже не удалось подключиться к базе данных.

Код:

index. js

const functions = require('firebase-functions');
const server = require('./server.js');
exports.api = functions.runWith({ memory: "2GB", timeoutSeconds: 120 }).https.onRequest(server);

Часть сервера. js

const express = require("express");
const dotenv = require("dotenv");
const colors = require("colors");
const morgan = require("morgan");
const path = require("path");
const cors = require("cors");
const bodyParser = require("body-parser");
const routes = require("./routes/routes.js");
const mongooseMethods = require("./database.js");
dotenv.config({ path: "./config/config.env" });
mongooseMethods.connectDB(process.env.MONGO_URL);
const PORT = process.env.PORT || 8080;

// set up app
const app = express();
app.listen(PORT, console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold));
app.use(cors({ origin: true }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(morgan("dev"));
app.use("/api", routes); // /api routes
module.exports = app;

маршруты. js

const express = require("express");
const app = express.Router();
const testingApi = require('../controller/testing.js');
const authApi = require('../controller/auth.js');

// testing
app.get('/testing', testingApi.testing);

// user authentication
app.post('/user/register', authApi.createUser);

module.exports = app;

API / тестирования / также работает

база данных. js

const mongoose = require("mongoose");
const mongooseMethods = {
    connectDB: async (url) => {
        try {
            console.log("Connecting to MongoDB")
            const connection = await mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true });
            console.log(`MongoDB Connected: ${connection.connection.host}`.cyan.bold);
            return connection;
        } catch (error) {
            console.log(`Error: ${error.message}, Exiting`.red.bold);
            process.exit(1);
        }
    }
}
module.exports = mongooseMethods;

auth. js

const User = require('../model/user.model.js');
const bcrypt = require("bcryptjs");

let authenticationApi = {
    createUser: async (req, res) => {
        try {
            console.log("Creating");
            let newUser = new User({
                ...req.body
            })
            let result = await newUser.save();
            return res.status(200).json({ result: result });
        } catch (error) {
            return res.status(400);
        }
    }

}

module.exports = authenticationApi;

Ошибка, которую я получил при отправке запроса в firebase:

2020-02-27T02:34:46.334044912Z D api: Function execution took 30970 ms, finished with status: 'connection error'

И все же он отлично работает в локальной системе. Я также не вижу консольный журнал "подключен к MongoDB". Я предполагаю, что проблема возникает в базе данных. js, что она не смогла подключиться к понедельнику go, но пока не знаю, как ее решить.

Я использую платный план в Firebase и с исходящей сетью все должно быть в порядке.

ps, это мой первый пост здесь. спасибо за ваше время, и я заранее извиняюсь, если нарушаю какие-либо правила.

1 Ответ

0 голосов
/ 27 февраля 2020

Прослушивание порта не является допустимой операцией в облачных функциях:

app.listen(PORT, console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold));

Облачные функции прослушивают вас, используя назначенный им URL-адрес, затем доставляют запрос в ваш код. Когда вы передаете ваше express приложение на onRequest(), все готово для вас.

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

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