知道Express应用是否正在作为Firebase云功能运行

时间:2018-11-18 12:55:37

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

我有一个Express应用,我想在我的计算机中作为独立服务器在本地运行,但是,当将其部署到Firebase云功能时,我需要将其设置为云功能。

是否有一种可靠的方法可以知道应用程序在哪个环境中运行而无需手动设置环境变量或最佳实践是什么?

例如:

if(isRunningInFirebase()){
  exports.myFun=functions.https.onRequest(app)
} else app.listen(3030)

4 个答案:

答案 0 :(得分:2)

here所述,有些环境变量会在函数运行时和本地模拟的函数中自动填充。例如,GCLOUD_PROJECT变量就是其中之一,该变量设置为Firebase项目ID。您可以像下面这样让您的应用检查它:

if(process.env.GCLOUD_PROJECT) { 
    // running in Firebase environment 
}
else { 
    // running somewhere else 
}

答案 1 :(得分:1)

我通过登录process.env进行了一些探索

使用firebase函数在本地运行函数时:shell或firebase serve --only函数,有一堆本地机器类型节点变量。

运行Firebase Cloud Functions中的已部署功能时。在本地运行时,没有设置新的节点环境变量:

NODE_ENV: 'production'

要使用它:

if (process.env.NODE_ENV === 'production') { 
    // running in production cloud environment 
} else { 
    // running locally (shell or serve) 
}

答案 2 :(得分:1)

在本地运行或在Google计算机上远程运行程序之前不必编辑程序可以节省大量时间。

对象process.env在本地以及在云中运行时都被声明。差别很大,但是我认为这是一个可靠,易于理解和使用的属性。

此独立代码说明了它的位置,并将变量port设置为我在两种情况下都使用的常用数字。

// Dan K The program wants to know, where am I ?
'use strict'

console.log( "program ID: " + "zincoNoDogs13" );

// Make a message and set a port number for other uses depending on whether the
// program wakes up on a local computer or in google cloud

const functions = require( 'firebase-functions' );
const express = require('express');
const app = express();
exports.api = functions.https.onRequest( app );

var port;
var imaThis = "local";
let lookie = process.env.HOME;
if( lookie == "/tmp" ) { imaThis = "cloud"; }

if( imaThis == "local" ) {console.log( "I am on a local computer" ); port = 3000; }
if( imaThis == "cloud" ) {console.log( "I am in the clouds man" ); port = 80; }

console.log( "Port number is going to be: " + port );

您一个人得到,或者无论如何,我还是这样做:

程序ID:zincnoNoDogs13 我在云端 端口号将是:80

程序ID:zincnoNoDogs13 我在本地计算机上 端口号将为:3000

答案 3 :(得分:1)

Firebase现在在运行模拟器时设置FUNCTIONS_EMULATOR环境变量:

if (process.env.FUNCTIONS_EMULATOR === 'true') {
    functions are on localhost
} else {
    functions are on Firebase
}