Проблема тайм-аута запроса js узла - PullRequest
0 голосов
/ 18 апреля 2019

Мое приложение реагирует и вызывает слой node через axios вызов. Затем слой node вызывает внешний api, на ответ которого требуется около 7 минут. Однако я получаю ошибку времени ожидания примерно через 2-3 минуты с момента выполнения запроса. Когда я вызываю внешний api напрямую (не через уровень узла), я могу получить ответ за 7 минут. Я попытался установить timeout для node, используя такие предложения, как

var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end("Hello World");
    }).on('connection', function(socket) {
      socket.setTimeout(200000000);
    }).listen(3000);

, а также server.timeout , но, похоже, ничего не работает. Может кто-нибудь подсказать, как решить проблему.

Я получаю следующую ошибку

Ошибка сети при createError (webpack-internal: ///./node_modules/axios/lib/core/createError.js: 16: 15

Я использую Axios

axios.post('/api/parseAndExtractFile', formData, config)
  .then((response) => {
    if (response.status === 200) {
      const fileName = `enriched_v3_spec_${new Date().getTime()}`
      const blob = new Blob([(response.data)], {type: 'application/vnd.ms-excel.sheet.macroEnabled.12'})
      saveAs(blob, fileName)
    } else {
      toast.error('Oops, something went wrong. Please try again.', {autoClose: 4000})
    }
    this.setState({
      loading: false,
      showAuditLog: 'show'
    })
  })
  .catch((error) => {
    this.setState({loading: false})
    toast.error(`Error while fetching data ${error}`, {autoClose: 4000})
  })

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Я думаю, что вы вызываете setTimeOut не в том месте.Возможно, вам потребуется установить createServer в var, а затем вызвать для него setTimeOut следующим образом:

`var http = require('http');
var srv = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end("Hello World");
})

svr.listen(3000);
svr.setTimeout(10000);

Надеюсь, это поможет

0 голосов
/ 18 апреля 2019

Тайм-аут как для узла, так и для Axios

1) Установка времени ожидания для узла

var http = require('http');
var srvr = http.createServer(function (req, res) {
  res.write('Hello World!');
  res.end();
});
srvr.listen(8080);
srvr.timeout = 20000; // in milliseconds

2) Установка таймаута для axios

const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 10000, // in milliseconds
  headers: {'X-Custom-Header': 'foobar'}
});
...