Тайм-аут в setupProxy работает в локальном хосте, но не в доку - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над приложением в NodeJS и React для моих исследований, и у меня возникает проблема:

Когда я использую свое приложение в localhost, время ожидания для моего сообщения с запросом на длительное время ( 20/30 минут) работает (напишите в файле setupProxy. js). Но в приложении, развернутом в Dokku, этот тайм-аут не работает (запрос завершается через 1 минуту с ошибкой: « POST 504 (время ожидания шлюза) »). Я думаю, что у Dokku есть тайм-аут по умолчанию, но я не уверен, и я не выяснил, как я могу это исправить.

Мой код:

setupProxy. js

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function (app) {
 var port;
  if (process.env.PORT) {
    port = process.env.PORT;
  } else {
    port = 5000;
  }

  app.use(
    createProxyMiddleware('/api/students', {
      target: `http://localhost:${port}`,
      timeout: 3840000,
    })
  );
  app.use(
    createProxyMiddleware('/api', {
      target: `http://localhost:${port}`,
    })
  );
};

сервер. js

const express = require('express');
const connectDB = require('./config/db');
const path = require('path');

const app = express();

//Connect Database
connectDB();

//Set the limit  higher
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb', extended: true }));

//Define Routes
app.use('/api/users', require('./routes/api/users'));
app.use('/api/admins', require('./routes/api/admins'));
app.use('/api/auth', require('./routes/api/auth'));
app.use('/api/profile', require('./routes/api/profile'));
app.use('/api/students', require('./routes/api/students'));
app.use('/api/email', require('./routes/api/email'));

// Serve static assets in production
if (process.env.NODE_ENV === 'production') {
  // Set static folder
  app.use(express.static('client/build'));

  app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
  });
}
//Look on the heroku app for the port OR take de default port 5000
const PORT = process.env.PORT || 5000;

var server = app.listen(PORT, () =>
  console.log(`Server started on port ${PORT}`)
);

Заранее благодарим за помощь! Камилла.

1 Ответ

0 голосов
/ 28 апреля 2020

Dokku использует nginx для запросов прокси, который, по-моему, имеет тайм-аут по умолчанию 60 секунд.

Похоже, есть плагин, который можно использовать для изменения этого тайм-аута для каждого приложения здесь . Это также было бы хорошим кандидатом для добавления поддержки непосредственно в апстрим.

...