Ошибка узла js HTTP 500.1016 при попытке передать ответ клиенту - PullRequest
0 голосов
/ 01 марта 2019

Я использую responseJs и Node для серверной части.Мне нужно разрешить пользователям нажимать кнопку «Загрузить данные», которая вызовет Node API.Node api запрашивает базу данных mySQL для конкретной таблицы и передает ответ пользователю с помощью fast-csv .На стороне клиента я собираю поток ответов с помощью streamSaver и записываю в загружаемый CSV-файл.

Все это прекрасно работает на моем локальном компьютере, но при развертывании на внутреннем сайте Azure я получаю приведенную ниже ошибку http, если имеется более 1 чанка.Для небольших таблиц загрузка работает нормально.

Ошибка HTTP 500.1016 - Внутренняя ошибка сервера

Это мой код обработки вызовов и ответов клиента:

handleDownloadData = () => {
  const streamSaver = require('streamsaver');
  const obj = {
    tableName: tableName
  };
  fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(obj)
  }).then(res => {
    const fileStream = streamSaver.createWriteStream(tableName + '.csv');
    const writer = fileStream.getWriter();

    if (res.body.pipeTo) {
      writer.releaseLock();
      return res.body.pipeTo(fileStream);
    }

    const reader = res.body.getReader();
    const pump = () =>
      reader
        .read()
        .then(({ value, done }) =>
          done ? writer.close() : writer.write(value).then(pump)
        );

    pump().then(() => {
      message.destroy();
      message.success('Download completed');
    });
  });
};

И это api узла:

app.post('/api/someurl/:someParam', (req, res) => {
  let pool = mysql.createPool({
    host: config.host,
    user: config.username,
    password: config.password,
    database: config.database,
    port: config.port
  });

  const tableName = req.body.tableName;
  if (typeof tableName !== 'undefined') {
    pool.getConnection(function(err, con) {
      let sql = `SELECT * FROM ${con.config.database}.${tableName}`;

      res.status(200);
      res.setHeader(
        'Content-disposition',
        'attachment; filename=' + tableName + '.csv'
      );
      res.setHeader('Content-type', 'text/csv');

      let csvStr = csv.createWriteStream({ headers: true });

      // open database stream
      var dbStr = con.query(sql).stream();

      // connect the streams
      dbStr.pipe(csvStr).pipe(res);
    });
  } else {
    res.send([]);
  }
});

Существует ли какая-либо причина, по которой это может произойти сбой в Azure или через удаленный сервер в целом?Диагностическая консоль Kudo не показывает ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...