【问题标题】:Typeorm + Express on Cloud Function for FirebaseTypeorm + Express on Cloud Function for Firebase
【发布时间】:2020-09-05 15:07:57
【问题描述】:

我搜索了很多,但没有关于如何使用 Typeorm 和 express 设置 firebase 云功能。

我正在尝试使用 Express + Apollo 服务器 + TypeORM 构建一个 api 服务器,但是要使用 TypeORM 连接到数据库,我需要执行类似的操作

createConnection().then(async connection => {
  // init server here
  app = express()
  ...
})

但要部署到 Firebase,我必须这样做

export const server = functions.https.onRequest(app)

我该如何组合这些?

也许我能做到

export const server = functions.https.onRequest(async (req, res) => {
  createConnection().then(async connection => {
    // init server here
    app = express()
    ...
  })
})

但是由于是Cloud Function,所以每次请求来,都会创建一个新的实例,也就是创建一个新的连接。这个可以吗?不会有速度问题吗?


更新

import { connect } from './config';

const app = express()
export const server = functions.https.onRequest(async (req, res) => {
  const connection = await connect();
  return app(req, res)
})

【问题讨论】:

    标签: node.js firebase express google-cloud-functions typeorm


    【解决方案1】:

    假设您有一个./config 文件,您可以在其中建立数据库连接。然后,您可以将其导入您的index.ts 并按如下方式使用:

    import * as functions from 'firebase-functions';
    import { connect } from './config';
    
    export const server = functions.https.onRequest(async (request, response) => {
         
        // Establish connection to DB
        const connection = await connect();
    
        const usersRepository = connection.getRepository(Users);
    
        // Count the users
        const count = await usersRepository.count();
    
        // Get all the users 
        const allUsers = await usersRepository.find();
    
        // SQL Query to fetch the users who are older than 21
        const query = await usersRepository.query('SELECT name FROM users WHERE AGE > 21');    
    
        response.send(allUsers);
    
    });
    

    如果您对如何配置配置文件仍有疑问,我相信将sample codetypeORM configuration files 一起使用可能会有所帮助。

    我还建议您查看Firebase documentation,了解有关在 Cloud Functions for Firebase 中使用 Express.js 的示例。


    更新:要将 Express + TypeORM 添加到 Cloud Function for Firebase,您可以执行以下操作:

    import * as functions from 'firebase-functions';
    import {Request, Response} from "express";
    import { connect } from './config';
    import * as express from 'express';
    
    // Initializing Express server and defined PORT
    const PORT = 3000;
    const app = express();
    
    // Register '/' endpoint 
    app.get('/', (request, response, next) => {
      response.send('Hello World from Cloud Firestore for Firebase');
    });
    
    // Register 'users' endpoint
    app.get('/users', async function(request: Request, response: Response) {
    
      // Establish connection to DB
      const connection = await connect();
    
      const usersRepository = connection.getRepository(Users);
    
      // Get all the users 
      const allUsers = await usersRepository.find();
    
      response.json(allUsers);
    
    });
    
    app.listen(PORT, () => {
      console.log('Server is running on PORT', PORT);
    });
    
    // Exports the Express app as a single HTTP function
    exports.app = functions.https.onRequest(app); 
    

    请查看Firebase documentationadding Express to the application 的TypeORM 存储库。

    【讨论】:

    • 谢谢!很好的示例代码。请参阅更新的问题。这是组合快递的有效方式吗?
    • 当然,我刚刚编辑了我的答案。您将需要实施一些代码重构。您可以使用上面的代码并根据需要进行调整。 免责声明:代码未经测试。
    猜你喜欢
    • 2018-09-09
    • 2020-04-29
    • 2020-10-26
    • 1970-01-01
    • 2020-12-24
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    相关资源
    最近更新 更多