【问题标题】:Nuxt generate and firebase gives timer warningNuxt generate 和 firebase 给出计时器警告
【发布时间】:2020-08-15 14:12:32
【问题描述】:

我在 Nuxt.js 中基于 firestore 中的集合动态生成路由。一切正常,但随后会发出此警告。

   ╭──────────────────────────────────────────────────────────────────────────────────────╮
   │                                                                                      │
   │   ⚠ Nuxt Warning                                                                     │
   │                                                                                      │
   │   The command 'nuxt generate' finished but did not exit after 5s                     │
   │   This is most likely not caused by a bug in Nuxt.js                                 │
   │   Make sure to cleanup all timers and listeners you or your plugins/modules start.   │
   │   Nuxt.js will now force exit                                                        │
   │                                                                                      │
   │   DeprecationWarning: Starting with Nuxt version 3 this will be a fatal error        │
   │                                                                                      │
   ╰──────────────────────────────────────────────────────────────────────────────────────╯

根据this post 的建议,我添加了以下 sn-p:

export default {
  hooks: {
    generate: {
      done(builder) {
        firebase.firestore.terminate()
      }
    }
  },
}

但这会产生一个致命错误:

 FATAL  The client has already been terminated.                                                                                       23:39:58  

  at new FirestoreError (node_modules\@firebase\firestore\dist\index.node.cjs.js:1201:28)
  at FirestoreClient.verifyNotTerminated (node_modules\@firebase\firestore\dist\index.node.cjs.js:17311:19)
  at FirestoreClient.listen (node_modules\@firebase\firestore\dist\index.node.cjs.js:17371:14)
  at CollectionReference.Query$1.onSnapshotInternal (node_modules\@firebase\firestore\dist\index.node.cjs.js:21820:48)
  at CollectionReference.Query$1.getViaSnapshotListener (node_modules\@firebase\firestore\dist\index.node.cjs.js:21851:29)
  at node_modules\@firebase\firestore\dist\index.node.cjs.js:21846:23
  at new Promise (<anonymous>)
  at CollectionReference.Query$1.get (node_modules\@firebase\firestore\dist\index.node.cjs.js:21836:16)
  at routes (nuxt.config.js:185:79)
  at promisifyRoute (node_modules\@nuxtjs\sitemap\lib\cache.js:59:17)
  at AsyncCache.load [as _load] (node_modules\@nuxtjs\sitemap\lib\cache.js:18:28)
  at AsyncCache.get (node_modules\async-cache\ac.js:63:8)
  at internal/util.js:297:30
  at new Promise (<anonymous>)
  at AsyncCache.get (internal/util.js:296:12)
  at generateSitemap (node_modules\@nuxtjs\sitemap\lib\generator.js:54:37)


   ╭────────────────────────────────────────────────────────────────────────────────────────╮
   │                                                                                        │
   │   ✖ Nuxt Fatal Error                                                                   │
   │                                                                                        │
   │   FirebaseError: [code=failed-precondition]: The client has already been terminated.   │
   │                                                                                        │
   ╰────────────────────────────────────────────────────────────────────────────────────────╯

这是我的路线方法,部分来自this question

generate: {
    async routes() {
      const collection = await db.collection('restaurants').get();
      return collection .docs.map(x => `/restaurant/${x.title}`);
    }
},

此警告仅在我添加生成对象时出现,因此我知道问题出在该区域。有什么建议?

编辑:nuxt.config.js 中的 Firebase 初始化代码

import firebase from 'firebase/app'
import 'firebase/firestore'

const config = {
  apiKey: '',
  authDomain: '',
  databaseURL: '',
  projectId: '',
  storageBucket: '',
  messagingSenderId: '',
  appId: '',
  measurementId: ''
};
firebase.initializeApp(config);
const fireDb = firebase.firestore();

export default {
    generate :{...}
}

【问题讨论】:

  • 你能分享你的firebase初始化代码吗?
  • @HardikShah 完成
  • firebase 初始化代码在nuxt.config.jsplugin!!!请尝试作为插件。在该代码中使用 firestore 进行任何初始化,例如连接到特定商店??
  • @HardikShah 我在插件中有它。但是如果我在nuxt.config.js 中执行import {fireDb} from '@/plugins/firebase' 我得到Cannot find module '@/plugins/firebase' 所以我现在采用了另一种方法
  • 你是从plugins/firebase.js导出fireDb吗?

标签: firebase google-cloud-firestore nuxt.js dynamic-links


【解决方案1】:

如果您仍然需要帮助,您可以直接与 Firebase 联系,因为他们在此处提供免费支持:https://firebase.google.com/support/troubleshooter/contact

【讨论】:

    【解决方案2】:

    plugins/firebase.js 你应该导出fireDb 并且你可以导入任何组件并使用该变量,如下所示

    plugins/firebase.js

    import firebase from 'firebase/app';
    import 'firebase/database';
    
    if (!firebase.apps.length) {
      const config = {
        apiKey: '',
        authDomain: '',
        databaseURL: '',
        projectId: '',
        storageBucket: '',
        messagingSenderId: ''
      };
      firebase.initializeApp(config);
    }
    
    const fireDb = firebase.firestore();
    
    export { fireDb };
    

    【讨论】:

    • firebase.database() 或 firebase.firestore() ?
    • 我的错!在我的情况下,它是你的数据库,它是 firestore
    • 这是我已经拥有的。我在项目的.vue 文件中使用fireDb,以便正确导出。我只是无法在nuxt.config.js 中访问它我不知道为什么
    • 为什么你需要在 nuxt.config.js 你能解释一下吗!??
    • 这样我就可以生成动态路由了。所以我的数据库中有一个名为餐馆的集合,我希望每家餐馆都有自己的路线(页面)。但我不想手动创建它们,所以我使用 nuxt 根据该集合生成路由。
    【解决方案3】:

    新:

    这是节点和实时数据库的问题。

    以下工作无需终止进程: this.$fire.database.goOffline()


    旧有副作用(请勿使用):

    有关解决方案,请参阅以下 stackoverflow。我可以确认process.exit() 适用于我的用例。

    node process doesn't exit after firebase once

    【讨论】:

    • 抱歉更新导致数据库没有被注入。一旦我解决了这个问题,并且数据库正在工作,超时又开始了。一旦向数据库发出请求,超时就会再次开始......有趣的是,它说 V.6 但它让我按照 V.7 的要求进行迁移......所以尽管有包 json,我认为我在nuxtjs/firebase^7
    • 啊,在这种情况下,我没有使用@nuxtjs/firebase 抱歉没有在问题中指定这一点
    • 没关系,因为最终nuxtjs/firebase 只是一个预制插件。没有区别。
    • 也许我理解错了。 @nuxtjs/firebase 是一个控制firebase 的插件。因为我没有在项目中使用插件,所以我没有看到引用插件升级作为我用例解决方案的答案。
    • 没关系。我用一个可行的解决方案更新了我的答案!
    【解决方案4】:

    对于那些仍然无法解决这个问题的人,nuxt firebase 模块有一个配置标志可以在生成时终止事物:

    terminateDatabasesAfterGenerate: true

    在此处查看文档:https://firebase.nuxtjs.org/guide/options/

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 2018-02-20
      • 1970-01-01
      • 2020-08-11
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2019-01-19
      相关资源
      最近更新 更多