如何使用 Node.js 获取和设置数据到 Firebase?
How to get and set data to Firebase with Node.js?
我正在学习 Firebase 和 Node.js。我想从 Twitter 获取我的推文并将它们发送到 Firebase。我可以从 Twitter 检索我的推文,但无法将这些推文发送到 Firebase。
如何将从 Twitter 检索到的这些推文发送到 Firebase?
我试过以下代码:
var firebase = require('firebase');
// Initialize
var app = firebase.initializeApp({
ServiceAccount: {
projectId: "******",
clientEmail: "****@gmail.com",
privateKey: "-----BEGIN PRIVATE KEY-----\nkey\n-----END PRIVATE KEY-----\n"
},
databaseURL: "****.firebaseio.com"
});
// Set Sample Data
firebase.database().ref('/').set({
username: "test",
email: "test@mail.com"
});
我在控制台上收到以下错误:
Debugger listening on port 5858
crypto.js:279
var ret = this._handle.sign(toBuf(key), null, passphrase);
^
Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
at Error (native)
at Sign.sign (crypto.js:279:26)
at Object.sign (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\node_modules\jws\node_modules\jwa\index.js:54:45)
at Object.jwsSign [as sign] (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\node_modules\jws\lib\sign-stream.js:23:24)
at Object.JWT.sign (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\index.js:137:16)
at authJwt (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:83:16)
at fetchAccessToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:96:17)
at app_.INTERNAL.getToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:196:14)
at Zb.getToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\database-node.js:28:3496)
at yh (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\database-node.js:195:334)
Press any key to continue...
此外,这是我的 Firebase 规则,我使用这些规则只是为了测试目的:
{
"rules":
{
".read": true,
".write": true
}
}
我解决了我的问题。我刚刚从 Firebase 控制台下载了 serviceAccount.json 文件并将其插入到我的项目中。 'Service Account' 文件包含我需要的一切。
var firebase = require('firebase');
firebase.initializeApp({
databaseURL: 'https://*****.firebaseio.com',
credential: 'myapp-13ad200fc320.json', // This is the serviceAccount.json file
});
然后下面的代码工作得很好。
firebase.database().ref('/').set({
username: "test",
email: "test@mail.com"
});
我们在使用 AWS Beanstalk 时遇到了同样的问题。根本原因是因为私钥变量中\n
被\n
替换了
添加替换正则表达式后,问题得到修复:
"private_key": process.env.FIREBASE_PRIVATE_KEY.replace(/\n/g, '\n')
将变量打印到日志中也有助于隔离问题。
针对 node
应用中服务帐户的这一特定 syntax/library 正在被弃用。在服务器(即不是消费者应用程序,如 IoT 或桌面)上访问 firebase 的新方法是 firebase admin sdk
。
您的初始化代码现在应该是:
var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
您仍然可以手动输入您的凭据,但它们现在已分配给不同的 属性:
admin.initializeApp({
credential: admin.credential.cert({
projectId: "<PROJECT_ID>",
clientEmail: "foo@<PROJECT_ID>.iam.gserviceaccount.com",
privateKey: "-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n"
}),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
我正在学习 Firebase 和 Node.js。我想从 Twitter 获取我的推文并将它们发送到 Firebase。我可以从 Twitter 检索我的推文,但无法将这些推文发送到 Firebase。
如何将从 Twitter 检索到的这些推文发送到 Firebase?
我试过以下代码:
var firebase = require('firebase');
// Initialize
var app = firebase.initializeApp({
ServiceAccount: {
projectId: "******",
clientEmail: "****@gmail.com",
privateKey: "-----BEGIN PRIVATE KEY-----\nkey\n-----END PRIVATE KEY-----\n"
},
databaseURL: "****.firebaseio.com"
});
// Set Sample Data
firebase.database().ref('/').set({
username: "test",
email: "test@mail.com"
});
我在控制台上收到以下错误:
Debugger listening on port 5858
crypto.js:279
var ret = this._handle.sign(toBuf(key), null, passphrase);
^
Error: error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
at Error (native)
at Sign.sign (crypto.js:279:26)
at Object.sign (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\node_modules\jws\node_modules\jwa\index.js:54:45)
at Object.jwsSign [as sign] (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\node_modules\jws\lib\sign-stream.js:23:24)
at Object.JWT.sign (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\node_modules\jsonwebtoken\index.js:137:16)
at authJwt (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:83:16)
at fetchAccessToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:96:17)
at app_.INTERNAL.getToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\auth-node\auth.js:196:14)
at Zb.getToken (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\database-node.js:28:3496)
at yh (C:\Users\admin\Desktop\myProject\myProject\node_modules\firebase\database-node.js:195:334)
Press any key to continue...
此外,这是我的 Firebase 规则,我使用这些规则只是为了测试目的:
{
"rules":
{
".read": true,
".write": true
}
}
我解决了我的问题。我刚刚从 Firebase 控制台下载了 serviceAccount.json 文件并将其插入到我的项目中。 'Service Account' 文件包含我需要的一切。
var firebase = require('firebase');
firebase.initializeApp({
databaseURL: 'https://*****.firebaseio.com',
credential: 'myapp-13ad200fc320.json', // This is the serviceAccount.json file
});
然后下面的代码工作得很好。
firebase.database().ref('/').set({
username: "test",
email: "test@mail.com"
});
我们在使用 AWS Beanstalk 时遇到了同样的问题。根本原因是因为私钥变量中\n
被\n
替换了
添加替换正则表达式后,问题得到修复:
"private_key": process.env.FIREBASE_PRIVATE_KEY.replace(/\n/g, '\n')
将变量打印到日志中也有助于隔离问题。
针对 node
应用中服务帐户的这一特定 syntax/library 正在被弃用。在服务器(即不是消费者应用程序,如 IoT 或桌面)上访问 firebase 的新方法是 firebase admin sdk
。
您的初始化代码现在应该是:
var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});
您仍然可以手动输入您的凭据,但它们现在已分配给不同的 属性:
admin.initializeApp({
credential: admin.credential.cert({
projectId: "<PROJECT_ID>",
clientEmail: "foo@<PROJECT_ID>.iam.gserviceaccount.com",
privateKey: "-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n"
}),
databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});