【问题标题】:Is there any way in Nuxt3 to load a plugin once?Nuxt3 有什么方法可以加载一次插件吗?
【发布时间】:2022-11-11 09:43:15
【问题描述】:

我正在尝试将Sequelize 集成到我的Nuxt 3 项目中。但是,我无法弄清楚如何让它只加载一次,而不是在每次刷新页面/导航到另一条路线时重新加载它。

我在文档中找不到任何信息。甚至可能吗?

~/plugins/sequelize.server.ts

import { Sequelize } from "sequelize"

export default defineNuxtPlugin(async (nuxtApp) => {
    const config = useRuntimeConfig()
    
    const sequelize = new Sequelize(config.dbName, config.dbUser, config.dbPass,{
        host: config.dbHost,
        port: parseInt(config.dbPort),
        dialect: 'mysql',
    })

    try {
        await sequelize.authenticate()

        // this log was executed every time I navigate to a new route
        // or refreshing the browser.
        console.log('Connection has been established successfully.');
    } catch (error) {
        console.error('Unable to connect to the database:', error);
    }
    
    return {
        provide: {
            db: sequelize
        }
    }
})

【问题讨论】:

  • 如果我没记错的话(行为是否从 Nuxt2 更改为 Nuxt3?)但是在您拥有 Vue 实例的整个过程中都会加载一个插件。因此,如果您进行客户端导航,什么都不会改变:插件应该仍然是全局可用的并且只加载一次。如果您重新加载页面,您将核对整个应用程序,以便您重新下载它(我不明白您为什么不能)。
  • 我不确定 Nuxt2 的行为,但我认为它应该按照你说的方式加载。但事实是,它在每次页面转换时都会重新初始化*,这很奇怪。 *可以通过查看消息来确认这一点:Connection has been established successfully.,每次我导航到不同的页面时都会打印出来。
  • 你有那个minimal reproducible example 吗?
  • 啊啊啊……是我!我做了一个可组合的,在我的组件的一个 mounted 钩子中初始化它并忘记删除它。在我尝试进行复制回购后,我立即意识到了这一点。傻我! ><

标签: vue.js sequelize.js nuxt.js nuxtjs3


【解决方案1】:

OP 通过删除在组件的 mounted 生命周期挂钩上初始化的可组合项解决了他的问题。

只是剩下的一段代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多