vue.js 使用Nuxt Pinia从本地JSON文件获取数据

9lowa7mx  于 2023-02-19  发布在  Vue.js
关注(0)|答案(1)|浏览(371)

是否可以使用fetch()获取本地.json.文件?我最初使用import方法,但除非页面重新加载,否则网站的数据不会更新。
我试过了,但是没用:

存储/字符.ts

export const useCharactersStore = defineStore("characters", {
  state: () => ({
    characters: [],
  }),
  getters: {
    getCharacters: (state) => {
      return state.characters;
    },
  },
  actions: {
    fetchCharacters() {
      fetch("../data.json")
        .then((response) => response.json())
        .then((data) => {
          this.characters = data.characters;
        });
    },
  },
});

应用程序版本

import { useCharactersStore } from "~/stores/characters";

const store = useCharactersStore();

onMounted(() => {
  store.fetchCharacters();
});

任何帮助都将不胜感激。

bn31dyow

bn31dyow1#

也许有点晚,但我遇到了同样的问题迁移从Nuxt 2到Nuxt 3。
我当然不是这方面的Maven,所以如果有人发现一个更好的方法,或者如果我完全错了,请让我知道!
每当你在vue代码中导入一个json文件时,它们会被导入为一个模块,嵌入到构建时的代码编译中(Vue Docs)。要将json用作外部文件,你需要将你的json放在/public目录中,并使用axios或fetch通过一个lifecyle钩子加载文件。

  • 这可以是选项API的mounted(),也可以是组合api的beforeMount()/onMounted()。*

然而,一些重要的注解,这种方法。
如果你想在你的应用中使用的json文件不是被动的,也就是说,不会改变,你应该把它放在nuxt应用的静态文件夹中。
在你的例子中,你获取了'../data/...',这意味着服务器知道要查找的域。它不能像这样调用路由,如果你把你的json文件放在静态文件夹中,你必须给予完整的url。
1.在nuxt.config.ts的中设置baseUrl,请参阅文档了解规范。
1.然后可以使用.env变量访问static文件夹--〉$fe
然后,在数据脚本中,您可以访问json文件

async getJson(some parameters){
const data = $fetch('your domain with the runtimeConfig composable').then((data)=>{ console.log(data)});

侧记你也可以使用fs从服务器端加载文件。readFile阅读更多关于这方面的文章here

相关问题