使用nuxt插件的axios发出http请求

时间:2019-12-12 23:52:12

标签: javascript vue.js plugins axios nuxt.js

我正在开发Nuxt应用程序,并且试图创建自定义插件,该插件将在构建Nuxt应用程序之前和之前(仅在构建Nuxt应用程序之前)向多个端点执行http请求(因此在应用程序投入生产时将不会调用此插件)。

我的插件代码是

import axios from 'axios';
require('dotenv').config()

class Locales {
    constructor(locales) {
        this.availableLanguages = locales.split(',')
    }

    /* Helpers methods */
    getLocales() {
        const allLocalesPromises = []
        for (const locale of this.availableLanguages) {
            allLocalesPromises.push(
                axios.get(`${process.env.BASE_URL}/${locale}/translations`)
            )
        }
        return allLocalesPromises
    }
    getTranslations(allLocalesPromises) {
        try {
            return Promise.all(allLocalesPromises)
        } catch (e) {
            console.error('Error performing promises', e);
        }
    }
    saveToFiles(allTranslations) {
        // save .json files from response in loop
        console.log('allTranslations', allTranslations)
    }

    /* API methods */
    async writeFiles() {
        const allLocalesPromises = this.getLocales()
        console.log('all locales', allLocalesPromises)

        const allTranslations = await this.getTranslations(allLocalesPromises)
        console.log('all translations', allTranslations);

        this.saveToFiles(allTranslations)
    }
}

const locales = new Locales(process.env.APP_LANGUAGES)
locales.writeFiles()

我有一个Locales类,我称它为writeFiles方法

  • 我正在将Locales文件中支持的语言传递给.env字符串。
  • 我正在执行getLocales,它只是在受支持的语言上进行迭代,并将未完成的Promise(从axios.get方法返回)推入数组,然后返回该数组。
  • 我正在执行getTranslations,其中我正在使用Promise.all来执行未完成的承诺。

Http请求未成功,因为我在控制台中看到此错误:

  

连接ECONNREFUSED 127.0.0.1:3000

正如您在writeFiles方法中看到的那样,我正在对其进行调试,而this.getLocales()方法则正常工作:

enter image description here

我只是觉得axios没有执行HTTP请求来更正URL,因为尽管此axios模块是独立包装,但它应该是http://localhost:3000/pl/translations而不是127.0.0.1:3000 ;它与@nuxtjs/axios无关,只是devDependiency。


第二件事是当前,即使我在服务器上的生产环境中启动Nuxt应用程序时,每次都会调用此插件,因为我在插件中的nuxt.config.js中有此插件:

plugins: ['./plugins/locales.server.js'],

但是我希望在构建应用程序时只调用一次,如何添加该限制?


修改

实际上,这个答案帮助了我https://stackoverflow.com/a/56663038/8425145

这仅仅是用localhost代替[::1],但我真的不知道,这篇文章的作者也没有写任何有帮助的书。有人可以向我解释吗?

0 个答案:

没有答案