MERN 웹 앱 백엔드의 호스트로 Firebase Functions를 사용하고 있습니다. 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);
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;
route.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 / testing /도 작동합니다.
database.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에 연결된"콘솔 로그가 표시되지 않습니다. 나는 처음에 mongo에 연결하지 못한 database.js에서 문제가 발생한다고 추측하고 있지만 해결 방법을 모르겠습니다.
Firebase에서 유료 요금제를 사용하고 있으며 아웃 바운드 네트워킹이 괜찮을 것입니다.
추신 이것은 여기에 처음 게시하는 것입니다. 시간 내 주셔서 감사 드리며 규칙을 어기면 미리 사과드립니다.
이것이 발생하는 이유는 Firebase Functions의 아키텍처가 실제 서버가 아니라 서버리스 람다와 유사한 엔드 포인트이기 때문입니다. 데이터베이스에 대한 지속적인 연결을 설정할 수 없기 때문에 요청을받을 때마다 연결해야하기 때문에 데이터베이스는이를 스팸으로 인식하고 Firebase의 추가 연결 요청을 종료합니다.
따라서 Firebase Functions에서 의도 된 지속적인 연결로 완전한 익스프레스 앱을 호스팅 할 수 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다