如何使用Node.js获取和设置数据到Firebase?
我正在学习Firebase和Node.js. 我想从Twitter获取我的Tweets并将它们发送到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文件,并将其插入到我的项目中。 “服务帐户”文件包含您需要的一切。
var firebase = require('firebase'); firebase.initializeApp({ databaseURL: 'https://*****.firebaseio.com', serviceAccount: 'myapp-13ad200fc320.json', //this is file that I downloaded from Firebase Console });
那么下面的代码很好地工作。
firebase.database().ref('/').set({ username: "test", email: "test@mail.com" });
我们遇到了与AWS Beanstalk相同的问题。 根本原因是\n
\\n
在私钥variables中被replace为\\n
。
replace正则expression式后,它是固定的:
"private_key": process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
将variables打印到日志中也可以帮助隔离问题。
此node
应用程序中服务帐户的特定语法/库已被弃用。 在服务器上(即,不是消费类应用程序,如物联网或桌面)的firebase admin sdk
新方法是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" });