You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js集成Firestore遇ECONNREFUSED错误,求解决方案

Next.js中Firestore连接失败(ECONNREFUSED)问题排查与解决

我是Firebase新手,在Next.js应用中尝试用Firestore获取数据时遇到连接错误,错误信息如下:

TypeError: fetch failed
at Object.fetch (node:internal/deps/undici/undici:11730:11)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
cause: AggregateError
at internalConnectMultiple (node:net:1114:18)
at afterConnectMultiple (node:net:1667:5)
at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) {
code: 'ECONNREFUSED',
[errors]: [ [Error], [Error] ]
}
}

相关代码:

import React from 'react';
import { initializeApp } from 'firebase/app'
import {
  getFirestore, collection, getDocs
} from 'firebase/firestore'

const firebaseConfig = {
    apiKey: process.env.API_KEY,
    authDomain: "social-app-a0aef.firebaseapp.com",
    projectId: "social-app-a0aef",
    storageBucket: "social-app-a0aef.appspot.com",
    messagingSenderId: "106093296170",
    appId: "1:106093296170:web:852948bb8d8fd86ccfe153"
  };

// init firebase
const app = initializeApp(firebaseConfig)

// init services
const db = getFirestore(app)

// collection ref
const colRef = collection(db, "books")

async function Firebase() {
    try {
        const snapshot = await getDocs(colRef)
        snapshot.forEach((doc) => {
            console.log(doc.data)
        })
    } catch (err) {
        console.error("firebase error:", err)
    }

    return (
        <div></div>
    )
}

export default Firebase

已检查.env.local文件、数据库状态,尝试捕获错误但仍未解决。


可能的原因及解决方法

1. Next.js环境变量配置问题

  • 确保.env.local中的变量名以NEXT_PUBLIC_开头,Next.js仅会将前缀为NEXT_PUBLIC_的环境变量暴露给客户端代码。将API_KEY改为NEXT_PUBLIC_API_KEY,同时更新代码中的引用:
apiKey: process.env.NEXT_PUBLIC_API_KEY,
  • 修改后必须重启Next.js开发服务器,环境变量才会生效。

2. Firebase初始化时机问题

在Next.js客户端组件中直接初始化Firebase可能导致重复初始化或连接异常,建议将初始化逻辑抽离到单独文件并添加重复初始化判断:

// lib/firebase.js
import { initializeApp, getApps } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';

const firebaseConfig = {
    apiKey: process.env.NEXT_PUBLIC_API_KEY,
    authDomain: "social-app-a0aef.firebaseapp.com",
    projectId: "social-app-a0aef",
    storageBucket: "social-app-a0aef.appspot.com",
    messagingSenderId: "106093296170",
    appId: "1:106093296170:web:852948bb8d8fd86ccfe153"
};

let app;
let db;

if (!getApps().length) {
    app = initializeApp(firebaseConfig);
    db = getFirestore(app);
} else {
    app = getApps()[0];
    db = getFirestore(app);
}

export { db };

在组件中导入使用:

import { collection, getDocs } from 'firebase/firestore';
import { db } from '../lib/firebase';

async function Firebase() {
    try {
        const colRef = collection(db, "books");
        const snapshot = await getDocs(colRef);
        snapshot.forEach((doc) => {
            console.log(doc.data()); // 修正:调用data()方法,而非访问data属性
        });
    } catch (err) {
        console.error("firebase error:", err);
    }

    return <div></div>;
}

export default Firebase;

3. 网络或防火墙限制

  • ECONNREFUSED表示无法连接到Firestore服务,检查本地网络是否能访问firestore.googleapis.com。
  • 临时关闭本地防火墙、VPN或代理工具,尝试重新连接。

4. Firestore数据库权限设置

确保Firestore安全规则允许读取操作,开发阶段可临时设置宽松规则(上线前务必修改为严格权限):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

5. 代码细节修正

代码中doc.data是函数属性,正确获取文档数据需要调用doc.data()方法,虽然这不是连接错误的直接原因,但属于需要修正的代码问题。


内容的提问来源于stack exchange,提问作者Rumert Kıran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:33:21