Значение req.body не определено REST API

#javascript #node.js #rest #axios

Вопрос:

Я создаю приложение REST API. У меня есть интерфейс (Nuxt.js) и API (Express.js), и я пытаюсь отправить данные из интерфейса в API. Api работает на порту 3001, а интерфейс-на порту 8010.

Итак, отправка данных выглядит следующим образом:

Функция на передней панели:

   methods: {
    async postTip() {
      const test = await postTipFunc({
        content: this.tipContent
      })
    }
  }
 

Вот postTipFunc функция (project_front/api/index.js) :

 import axios from "axios";
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'


const api = axios.create({
  baseURL: 'http://localhost:8010/',
  headers: {
    'Content-Type': 'application/json'
  }
})

export const postTipFunc = async payload => {
  const { data } =  await api.post(`p-t`, payload)
  return data
}
 

Вот конечная точка, которая ведет в серверную часть (project_front/server/routes/index.js) :

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
const { Router } = require('express')
const axios = require('axios')
const dotenv = require('dotenv')
dotenv.config()

const api = axios.create({
  baseURL: "http://localhost:3001/",
})

const router = Router()

router.post(`/p-t`, async (req, res) => {
  try {
    const data = await api.post(`/post-tip`, req.body)
    res.json(data.data)
  } catch (e) {
    console.log(e)
  }
})

module.exports = router
 

И, наконец, бэк-энд (prodect_api/src/routes/index.js) :

 const router = require('express').Router();
const wrapAsync = require('./../middlewares/async')
const tipController = require('../controllers/tip')

router.post(
  "/post-tip",
  wrapAsync(tipController.postTip)
)

module.exports = router;
 

На самом деле, эта функция tipController.postTip просто получает данные и показывает их в консоли, так что нет смысла их показывать.

Также, если это может помочь, console.log() показывает данные только здесь — project_front/api/index.js . После этого момента все становится undefined

Итак, как я могу это исправить?

Ответ №1:

Хорошо, вот ответ, чтобы все работало, вам нужно установить body-parse в свой API. Именно так:

 const bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
 

Надеюсь, это кому-нибудь поможет!