【发布时间】:2020-12-09 10:33:11
【问题描述】:
Firebase 环境变量似乎未定义,即使我按照文档进行了所有操作。
我根据这样的文档设置了我的 firebase 环境:
firebase functions:config:set mailerlite.key='12345' mailerlite.groupid='id123'
通过在我的终端中输入此 CLI
firebase functions:config:get
我找回来了
{
"mailerlite": {
"key": "12345",
"id": "id123"
}
}
到目前为止一切顺利。但我无法从我的 express.js 访问它。这是我的函数/index.js:
const functions = require('firebase-functions');
const express = require('express');
const bodyParser = require('body-parser');
const fetch = require("node-fetch");
const sensitive = require('./sensitive.js');
var cors = require('cors');
const app = express();
var allowedOrigins = ['http://localhost:8081',
'https://myapp.com'];
app.use(cors({
origin: function (origin, callback) {
// allow requests with no origin
// (like mobile apps or curl requests)
if (!origin) return callback(null, true);
if (allowedOrigins.indexOf(origin) === -1) {
var msg = 'The CORS policy for this site does not ' +
'allow access from the specified Origin.';
return callback(new Error(msg), false);
}
return callback(null, true);
}
}));
app.use(bodyParser.urlencoded({ extended: true }));
const port = 3000
app.post('/subscribe', (req, res, next) => {
console.log('key', functions.config().mailerlite.key);
console.log('stringify', JSON.stringify(req.body));
console.log('req.body: ', req.body);
//console.log('req.body.email', req.body.email);
(async function () {
try {
const mailerLiteResponse = await fetch('https://api.mailerlite.com/api/v2/groups/' + sensitive.groupId + '/subscribers', {
method: 'POST',
mode: 'Cors',
headers: {
'content-type': 'application/json',
'X-MailerLite-ApiKey': functions.config().mailerlite.key,
},
body: JSON.stringify(req.body)
});
const responseJson = await mailerLiteResponse.json();
res.status(mailerLiteResponse.status).send(mailerLiteResponse.body);
console.log('mailer response: ', responseJson);
console.log('key2', functions.config().mailerlite.key);
} catch (err) {
return next(err)
}
})();
});
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`)
})
exports.app = functions.https.onRequest(app);
一旦我运行服务器,这就是我得到的响应:
TypeError: Cannot read property 'key' of undefined
at /Users/tomas/code/ambee2_track_progress_server/functions/index.js:44:53
at Layer.handle [as handle_request] (/Users/tomas/code/ambee2_track_progress_server/functions/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/tomas/code/ambee2_track_progress_server/functions/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/tomas/code/ambee2_track_progress_server/functions/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/tomas/code/ambee2_track_progress_server/functions/node_modules/express/lib/router/layer.js:95:5)
at /Users/tomas/code/ambee2_track_progress_server/functions/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/tomas/code/ambee2_track_progress_server/functions/node_modules/express/lib/router/index.js:335:12)
at next (/Users/tomas/code/ambee2_track_progress_server/functions/node_modules/express/lib/router/index.js:275:10)
at /Users/tomas/code/ambee2_track_progress_server/functions/node_modules/body-parser/lib/read.js:130:5
at invokeCallback (/Users/tomas/code/ambee2_track_progress_server/functions/node_modules/raw-body/index.js:224:16)
【问题讨论】:
-
你试过
console.log('key', functions.config())看看它是否返回任何东西吗? -
这是
console.log('key', functions.config())的输出:key {}所以,看起来firebase cli 没有正确分配配置键,但是我可以通过firebase functions:config:get检索它们
标签: node.js firebase express google-cloud-functions