Задать вопрос
@ProStavr

На сервер POST-запрос с JSON от Axios приходит но без данных в body. Где ошибся?

+++++++++++++++++++++++++++++++++
++ Доброго времени, братья и сестры
+++++++++++++++++++++++++++++++++
Клиент: Vue 3, Axios 1.1.3v., CORS latest
-
"С каждым днем все очевидней для всех: некая невидимая сила все больше подталкивает нас не использовать старания посредников (между нами и требуемым) и всё реализовывать САМОСТОЯТЕЛЬНО" :: ProStavr

Ох уж эти модификаторы/обновляторы, с утра и до вечера меняющие алгоритмы своих творений, а мы потом расхлебывай и разгребай их г...) Опять чудеса с Axios запросами - отправленные запросы долетают до сервера но без данных в body.

"Инфернальный мир глубоко проник в наше общество, управляя действиями проявленных, нарушая гармонию их творений, строя козни, создавая хаос и сея ложь" :: ProStavr


636822529e99c730814938.jpeg
Простите за столь пафосное вступление)..
Заголовок не поставил верный, CORS не настроил? - скажете вы, но заголовки в порядке как на сервере так и на клиенте, также и CORS настроен согласно их документации.
Но во времена тотальной лжи и искажения информации уж очень часто мне попадаются явные ошибки, причем от "производителей" в их же описании к "продукту" - уверен вам это знакомо точно. И что то мне подсказывает что тут как раз такой случай. Помогите выявить где что не так в коде, возможно разубедите.
-
## КЛИЕНТ ##
тут подключаю Axios и его заголовки
import axios         from 'axios'
import config        from '@/config'

const apiClient = AxiosCreate ( '//' + config.SERVER_HOST + ':' + config.SERVER_PORT + '/api' )

function AxiosCreate ( baseURL ) {
    return axios.create ( {
        withCredentials: false,
        baseURL,
        headers: { 'Content-type': 'application/json;charset=utf-8' },
        timeout: 20000
    } )
}
export default apiClient

-
тут сам запрос
// ...
async submitReg () {

      try {
        // ...
        let body = {
          role: this.person,
          name: this.name_reg,
          email: this.email_reg,
          password: this.password_reg,
        }
        // сам запрос на сервер..
        this.$axios.post ( `/auth/signup`, body )
          .then (response => {
            // ...
          } )
      } catch ( err ) { return console.log ( err ) }
}
// ...


## СЕРВЕР ##
server.js
const config = require ( '@/server/config' )

// InitTheApp
let express = require ( 'express' )
let app     = express ()
let server  = require ( 'http' ).createServer ( app )

// ParseRequests
app.use ( express.json() )
app.use ( express.urlencoded ( {extended: true } ) )

// Loger
const morgan = require ( 'morgan' )
app.use ( morgan ( ':remote-addr [:date[clf]] ":method :url HTTP/:http-version" :status :req[content-length] :res[content-length]' ) )

// CORS
let cors = require ( 'cors' )
let corsOptions = {
	methods: ['OPTIONS,GET,POST,PUT,DELETE'],
	credentials: false,
	origin: true,
	maxAge: 3600,
	allowedHeaders: ['Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With'],
	optionsSuccessStatus: 200
}
app.use(cors())
// ...

-
Функция , обрабатывающая роут signup:
// ...
authSignUp = async ( req, res ) => {

    try {

        console.log ( 'Processing func -> SignUp' )
        console.log ( req.body )

        answer.text = req.body

        // ...
        res.json ( answer )
        return answer = {}
    } catch ( err ) { res.send ( err ) }
}
// ...

-
Согласно документации "изобретателей-усЛОЖнителей" все настроено верно и я ну никак не могу догнать свой ERROR.
-
Повторюсь: с клиента запрос долетает до сервера, но без данных, с пустым body:
консоль браузера
636799a0b79f3131264617.png
ответ сервера
636799a99e52a294568459.png
-
с API-тестировщика запрос проходит как и положено:
API-тестировщик
63679a00e6bac871608862.png
ответ сервера
63679a1094e68741276288.png
-
если отключить заголовок в тестировщике при отправке то мы получаем ту же картину - данные в body отсутствуют:
63679c672ff98833934618.png
-
Это все говорит о том что в запросе отсутствует заголовок "Content-type: application/json" и сервер не понимает как распарсить полученный body - НО ВЕДЬ В КОДЕ Я ЯВНО УКАЗАЛ ЗАГОЛОВОК!
Подтвердите мои догадки или разубедите меня - возможно кто то уже боролся с подобным идиотизмом.
  • Вопрос задан
  • 1120 просмотров
Подписаться 1 Сложный 2 комментария
Решения вопроса 1
@ProStavr Автор вопроса
Накатил более старую версию "axios": "^0.27.2" при этом ничего не меняя в коде - заработал запрос как нужно, сервер распарсил и вернул body.
Старше "axios": "^0.27.2" версии НЕ РАБОТАЮТ в подобной конструкции!!!, что явно указывает на фуфлыжников г...кодеров данного "великого продукта", как и предполагалось.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
yarkov
@yarkov Куратор тега Vue.js
Помог ответ? Отметь решением.
axios.post ( `/auth/signup`, { body } )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы