我正在开发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()
方法则正常工作:
我只是觉得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]
,但我真的不知道,这篇文章的作者也没有写任何有帮助的书。有人可以向我解释吗?