Пишите после завершения ошибки, используя рентген

Я использую рентгеновскую библиотеку в своем проекте MEAN.js и не могу исправить это сообщение об ошибке:

Ошибка: запись после завершения в writeAfterEnd (_stream_writable.js:166:12) в Writable.write (_stream_writable.js:211:5) в Writable.end (_stream_writable.js:446:10) в _stream_object (C:\src\je\foodleWeb\node_modules\x-ray\lib\stream.js:46:16) на следующем (C:\src\je\foodleWeb\node_modules\x-ray\index.js:137:11) на C:\src\je\foodleWeb\node_modules\x-ray\index.js:242:7 в C:\src\je\foodleWeb\node_modules\x-ray\lib\walk.js:56:12 при обратном вызове (C:\src\je\foodleWeb\node_modules\batch\index.js:147:12) в C:\src\je\foodleWeb\node_modules\x-ray\lib\walk.js:49:9 в C:\src\je\foodleWeb\node_modules\x-ray\index.js:232:24 в следующем (C:\src\je\foodleWeb\node_modules\x-ray\index.js:138:11) в C:\src\je\foodleWeb\node_modules\x-ray\index.js:242:7 в C:\src\je\foodleWeb\node_modules\x-ray\lib\walk.js:56:12 при обратном вызове (C:\src\je\foodleWeb\node_modules\batch\index.js:147:12) в C:\src\je\foodleWeb\node_modules\x-ray\lib\walk.js:39:11 в C:\src\je\foodleWeb\node_modules\x-ray\lib\walk.js:56:12 при обратном вызове (C:\src\je\foodleWeb\node_modules\batch\index.js:147:12) в C:\src\je\foodleWeb\node_modules\x-ray\lib\walk.js:49:9 в C: \ src \ je \ foodleWeb \ next_modules\x-ray\index.js:212:18 (C:\src\je\foodleWeb\node_modules\x-ray\index.js:138:11) на C:\src\je\foodleWeb\node_modules\x-ray\index.js:242:7 в C:\src\je\foodleWeb\node_modules\x-ray\lib\walk.js:56:12

Это мой код, в котором я использую встроенную функцию pipe для передачи ответа обратно в $http

export function show(req, res) {
  var stream = x(url,
    [{
      text: '.name'
    }])(function (err, data) {
      if (err) {
        console.log("[Xray] Error:", err);
      }
      else {
        return data;
      }
    }).stream();

  stream.pipe(res);
}

Я попытался использовать следующий подход, чтобы поймать исключение, но он не работает нормально, поскольку основан на обещаниях. Я хотел бы иметь что-то подобное, чтобы предотвратить сбой приложения.

Может быть, я мог бы обернуть свой код в функцию и передать обратный вызов или что-то подобное...

function respondWithResult(res, statusCode) {
  statusCode = statusCode || 200;
  return function (entity) {
    if (entity) {
      res.status(statusCode).json(entity);
    }
  };
}

function handleError(res, statusCode) {
  statusCode = statusCode || 500;
  return function (err) {
    res.status(statusCode).send(err);
  };
}

export function index(req, res) {
  return Squeme.find().exec()
    .then(respondWithResult(res))
    .catch(handleError(res));
}

1 ответ

Решение

Я копирую свое решение из комментариев, потому что никто не может обойти это.

Я мог бы найти решение, не используя функцию канала и создавая ответ следующим образом: return res.status(200).json(data);

Другие вопросы по тегам