Node.js中Firebase Admin初始化报错:Cannot read property 'cert' of undefined
Firebase Admin初始化报错:TypeError: Cannot read property 'cert' of undefined
问题场景
尝试在Node.js服务器中配置Firebase Admin,deploy.js初始化代码如下:
const admin = require('firebase-admin/app'); const serviceAccount = require('../serviceAccountKey.json') admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://projectName.firebaseio.com" }); ...
运行后出现错误:
credential: admin.credential.cert(serviceAccount), ^ TypeError: Cannot read property 'cert' of undefined at Object.<anonymous> (C:\Users\Uporabnik\hello-world\scripts\deploy.js:9:32) at Module._compile (internal/modules/cjs/loader.js:1068:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10) at Module.load (internal/modules/cjs/loader.js:933:32) at Function.Module._load (internal/modules/cjs/loader.js:774:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47
项目的package.json内容:
{ "name": "hardhat-project", "devDependencies": { "@nomiclabs/hardhat-ethers": "^2.0.6", "ethers": "^5.6.9", "hardhat": "^2.9.9" }, "version": "1.0.0", "description": "hello world smart contract", "main": "hardhat.config.js", "dependencies": { "cors": "^2.8.5", "express": "^4.18.1", "firebase-admin": "^11.0.0" }, "scripts": { "test": "mocha" }, "author": "", "license": "ISC" }
错误原因及解决办法
错误根源是Firebase Admin的导入方式错误:
你当前仅导入了firebase-admin/app模块,这个模块只包含App初始化相关方法,并不包含credential对象。因此admin.credential会是undefined,自然无法读取cert属性。
两种正确的导入方式:
- 导入完整的Firebase Admin模块(最直观的写法):
const admin = require('firebase-admin'); const serviceAccount = require('../serviceAccountKey.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://projectName.firebaseio.com" });
- 模块化导入所需部分(更贴合现代JS写法):
const { initializeApp } = require('firebase-admin/app'); const { cert } = require('firebase-admin/credential'); const serviceAccount = require('../serviceAccountKey.json'); initializeApp({ credential: cert(serviceAccount), databaseURL: "https://projectName.firebaseio.com" });
这两种方式都能正确获取cert方法,解决报错问题。
内容的提问来源于stack exchange,提问作者Nina
相关产品推荐
相关产品推荐

