#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. Да, это решается, делая это. На самом деле я пытался до того, как это не было решено. Может быть, это было связано с проблемой строительства контейнеров.