Nodejs не может получить тело запроса post

#node.js #reactjs #docker

Вопрос:

Я создал api nodejs и приложение react, и я их докеризовал.

Когда я пытаюсь отправить запрос post через api, тело запроса становится пустым.

Я создал контейнер api docker примерно так:

 FROM node:lts
# Create app directory
WORKDIR /app
# Install app dependencies
COPY package*.json ./

RUN npm install
# Copy app source code
COPY . .

#Expose port and start application
EXPOSE 4000
CMD [ "npm", "start" ]
 

Я также создал контейнер приложений react, подобный этому:

 FROM node:latest
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
 

Я дважды проверил, чтобы выразить промежуточное программное обеспечение json в nodejs:

 app.use(express.urlencoded());
app.use(express.json());
 

Я отправляю запрос на публикацию, подобный этому, в приложении react:

 fetch(`${serviceUrl}/metrics`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(getPerfanalytics().values),
})
 

Я вижу, что запрос работает хорошо, но тело запроса всегда пусто.

Вот как я могу получить запрос на публикацию:

     export const saveMetric = (req, res) => {
        let params = req.body;
        console.log(params);
        if (typeof params === 'string') {
            params = JSON.parse(params)
        }
        new Metric(params).save().then(metric => {
            res.json({
                message: 'Metric saved',
                data: metric
            });
        }).catch((err) => {
            res.status(500);
            res.json({
                message: 'Metric saving error',
                error: err
            });
        }

);
}
 

Как я могу решить эту проблему?

Спасибо

Комментарии:

1. Какой сервис вы используете?

2. Можете ли вы также опубликовать обработчик nodejs для /metrics маршрута? Кроме того, вам может потребоваться указать Content-Type заголовок: developer.mozilla.org/en-US/docs/Web/API/Fetch_API/…

3. @Joe localhost:4000 . это конечная точка api. Это работает идеально. С конечной точкой проблем нет.

4. Использует ли ваше промежуточное программное обеспечение express json поверх промежуточного программного обеспечения express router?

5. @segFault После настройки Content-Type я перезапустил контейнеры docker. Да, это решается, делая это. На самом деле я пытался до того, как это не было решено. Может быть, это было связано с проблемой строительства контейнеров.