Я уже много часов пытаюсь получить простой пост-запрос к моему внешнему API, работающему с Nuxt.
Он работает, как и ожидалось, от экземпляра отдельного узла , я могу POST и GET по мере необходимости со следующим:
const headers = {
'Content-Type': 'application/json',
'access-token': 'myTokenXYZ123'
};
const data = { test: 'Hello!' };
const postSomething = () => {
axios.post('https://myapidomain.com/api', data, {
headers: headers
});
};
postSomething();
Также с curl :
curl -X POST -H 'access-token: myTokenXYZ123' -H 'Content-Type: application/json' -d '{ "test": "Hello!" }' https://myapidomain.com/api
Пока все хорошо, теперь я хочу реализовать это в моем Nuxt проект. Сначала мне нужно было настроить http-прокси, что я и сделал в nuxt.config.js
следующим образом:
[...]
modules: [
'@nuxtjs/axios',
'@nuxtjs/proxy'
],
proxy: {
'/my-api/': { target: 'https://myapidomain.com/api', pathRewrite: {'^/my-api/': ''} },
},
axios: {
proxy: true
},
[...]
Я довольно уверен, что прокси работает, потому что я могу получить данные следующим способом :
methods: {
async getSomething() {
let requested = await this.$axios.get('/my-api/', {
headers: this.headers
});
return requested.data;
}
}
Но что бы я ни делал, запрос POST не работает. Вот как я пытался:
methods: {
postSomething() {
const data = { test: 'Hello!' };
this.$axios.post('/my-api/', data, {
headers: {
'Content-Type': 'application/json',
'access-token': 'myTokenXYZ123'
}
});
}
}
Я пробовал разные форматы, например, вот так:
methods: {
postSomething() {
const headers = {
'Content-Type': 'application/json',
'access-token': 'myTokenXYZ123'
};
const data = { test: 'Hello!' };
const options = {
method: 'post',
url: '/my-api/',
data: data,
transformRequest: [(data, headers) => {
return data;
}]
};
this.$axios(options);
}
}
Но, похоже, это не работает. Запрос выполняется и через некоторое время прерывается со следующей ошибкой в терминале:
ERROR [HPM] Error occurred while trying to proxy request from localhost:3000 to https://myapidomain.com/api (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors)
Несколько других вещей, которые я уже пробовал:
Локальный запуск API и Nuxt
Использование ax ios, импортированного в шаблон и в виде модуля nuxt
Запрос из сборочной и производительной версии
Asyn c и синхронные методы
Шаги для воспроизведения:
# Download and start API server
git clone https://github.com/consuman/api-demo.git
cd api-demo/
npm install
node src
# In a second terminal download and start Nuxt server
git clone https://github.com/consuman/api-demo-nuxt.git
cd api-demo-nuxt
npm install
npm run dev
# Navigate to http://localhost:3000
# Relevant code is in /api-demo-nuxt/pages/index.vue
К проверить, если API работает, вы можете POST с curl:
curl -X POST -H 'access-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjaGVjayI6dHJ1ZSwiaWF0IjoxNTg2MTYzMjAxLCJleHAiOjE2MTc2OTkyMDF9.vot4mfiR0j6OewlJ0RWgRksDGp-BSD4RPSymZpXTjAs' -H 'Content-Type: application/json' -d '{ "testData": "Hello from API, posted from curl, please overwrite me!" }' http://localhost:3001/api
Спасибо за чтение. Любая подсказка будет высоко ценится!