Firebase 功能:koa.js 服务器如何部署
Posted
技术标签:
【中文标题】Firebase 功能:koa.js 服务器如何部署【英文标题】:Firebase functions: koa.js server how to deploy 【发布时间】:2018-01-31 22:07:13 【问题描述】:我已经有一个用 MERN 堆栈编写的应用程序,带有 koa 服务器准备的构建版本。我通过node server.js
命令运行以启动整个应用程序的主节点文件看起来像this。
在每个教程中,我看到我需要在编码的开头添加functions.https.request
等(或者至少假设这样做)。
我怎么能像在 heroku 上一样在 firebase 上托管我的应用程序 - 整个服务器端?
【问题讨论】:
【参考方案1】:可以使用 firebase 函数托管 Koa
应用程序,我在谷歌搜索和分析后发现了这一点。
这是来自my project 的一段代码,现在托管在 firebase 函数中:
const Koa = require('koa');
const app = new Koa();
// ... routes code here ...
// This is just for running Koa and testing on the local machine
const server = app.listen(config.port, () =>
console.log(`HITMers-server is running on port $config.port`);
);
module.exports = server;
// This export is for Firebase functions
exports.api = functions.https.onRequest(app.callback());
您可以查看the docs 和tutorial video 了解更多信息。
顺便说一下,这里是 another example 将 Koa 部署到 now.sh
版本 2。
【讨论】:
【参考方案2】:您实际上可以完全跳过监听调用,并使用app.callback()
。
这似乎比在从未真正被命中的随机端口上监听更有意义。
const functions = require('firebase-functions');
const app = new Koa();
... // set up your koa app however you normally would
app.use(router.routes());
module.exports.api = functions.https.onRequest(app.callback());
【讨论】:
正确答案! 如果我得到请求超时,我尝试了functions.https.onRequest(app.callback())
,functions.https.onRequest((req, res) => app.callback(req,res))
当我这样做时functions.https.onRequest(app.callback)
我得到Cannot read property 'middleware' of undefined
【参考方案3】:
您可以使用 firebase 托管运行快速应用程序,以通过 firebase 函数提供动态内容。但是,您目前不能使用 Koa.js。 functions.https.onRequest
要求您传递 HTTP 请求处理程序或从 express()
返回的快速应用程序。
这里是 Firebase 中关于从函数中提供动态内容的相关文章。 https://firebase.google.com/docs/hosting/functions
这里是 Firebase 关于使用 express 的视频教程。 https://www.youtube.com/watch?v=LOeioOKUKI8
【讨论】:
【参考方案4】:对于任何寻找koa
Google Cloud Functions
的人,这是我在typescript
中的工作版本
import Koa from 'koa';
import Router from 'koa-router';
import type HttpFunction from '@google-cloud/functions-framework/build/src/functions';
const app = new Koa();
const port = process.env.PORT || 3001;
const router = new Router();
router.get('/', async (ctx) =>
ctx.body = 'Hello World!';
);
app.use(router.routes());
// For development on local
if (!isCloudFunctions())
app.listen(port, () =>
console.log(`Server running on port $port`);
);
export const helloWorldApi: HttpFunction = app.callback();
function isCloudFunctions()
return !!process.env.FUNCTION_SIGNATURE_TYPE;
部署:
gcloud functions deploy test-koa-function --entry-point=helloWorldApi --runtime nodejs16 --trigger-http --allow-unauthenticated
【讨论】:
【参考方案5】:您无法在 Cloud Functions 上部署和运行任意节点应用程序。您必须利用产品定义的不同类型的触发器。
查看Cloud Functions for Firebase main page 以查看列表。
Cloud Firestore 触发器 实时数据库触发器 Firebase 身份验证触发器 Google Analytics for Firebase 触发器 Crashlytics 触发器 云存储触发器 云发布/订阅触发器 HTTP 触发器
【讨论】:
Firebase 函数并非如此。仅当您直接使用 Google Cloud Functions 时。以上是关于Firebase 功能:koa.js 服务器如何部署的主要内容,如果未能解决你的问题,请参考以下文章