2015-08-14 2 views
0

Имейте очень странную прерывистую проблему, и тот, который я просто не могу понять. Не уверен, что это связано с кодом, ошибка в выражении или просто что-то мне не хватает.Странный (прерывистый) Невозможно установить заголовки после отправки ошибки

У вас есть приложение, все в MEAN, которое, как и многие другие приложения, выполняет кучу вызовов API. Некоторые даже параллельно.

Это все работало идеально утром, на самом деле, читать «где он получает странно», но потом вдруг он перестает работать, и сервер начинает падать сверх с ниже ошибки:

GET /api/skillList 304 45.345 ms - - 
_http_outgoing.js:335 
    throw new Error('Can\'t set headers after they are sent.'); 
     ^
Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11) 
    at ServerResponse.header (/Users/bengtbjorkberg/WebstormProjects/ResourceEdge/node_modules/express/lib/response.js:695:10) 
    at ServerResponse.json (/Users/bengtbjorkberg/WebstormProjects/ResourceEdge/node_modules/express/lib/response.js:232:10) 
    at /Users/bengtbjorkberg/WebstormProjects/ResourceEdge/routes/api.js:78:9 
    at /Users/bengtbjorkberg/WebstormProjects/ResourceEdge/node_modules/mongoose/node_modules/kareem/index.js:160:11 
    at Query._findOne (/Users/bengtbjorkberg/WebstormProjects/ResourceEdge/node_modules/mongoose/lib/query.js:1145:12) 
    at /Users/bengtbjorkberg/WebstormProjects/ResourceEdge/node_modules/mongoose/node_modules/kareem/index.js:156:8 
    at /Users/bengtbjorkberg/WebstormProjects/ResourceEdge/node_modules/mongoose/node_modules/kareem/index.js:18:7 
    at process._tickCallback (node.js:355:11) 

Process finished with exit code 1 

Что Я проверил.

  • Бросил тонны логов, похоже, что падает в разных местах, или я пропускаю один из мест
  • потратило много времени, смотря на последний звонок (/ апи/skilllist), чтобы работайте вполне нормально.

Где это становится действительно странно

Если я запускаю консоль разработчика в Chrome, проблема не больше появляться, возможно, поэтому он работал весь день, но потом перестал работать, когда я хотел показать кому-то ...

Когда я писал это, я понял, что могу использовать сафари, и он падает на консоль java, и это тот же серверный сервер. И его запрос к базе данных ниже. Но если я включаю консоль в Chrome, он начинает работать ... Что я упускаю

exports.canlist = function (req, res) { 
     // use mongoose to get all profiles in the database 
     console.log("Canlist called"); 
     Profile.find({}, {'_id':1, 'alias':1, 'img':1, 'summary':1, 'keys':1}, function(err, profiles) { 
      // if there is an error retrieving, send the error. nothing after res.send(err) will execute 
      if (err) { 
       console.log("Error " + err) 
       res.send(err) 
      } 
      console.log("Sending back " + profiles.length + " profiles") 
      res.json(profiles); // return all todos in JSON format 
     }); 
    }; 

ответ

0

Итак, после долгого faffing о, я понял это. Не почему это работает при использовании java-консоли, которую он открывает в Chrome.

В основном команда res.send (err) неверна. Сначала его недостающее возвращение. Во-вторых, я думаю, что вы, предполагают, чтобы использовать длинную форму, как это:

return res.status(500).send(err); 

return res.json(profile); 

Подумайте проблема заключалась в том, что он вводит в заблуждение экспресс, который, вероятно, сделать некоторые предварительные обработки, что может объяснить, почему это «кажется», чтобы взорвать во все времена.

(Было бы спокойнее об этом, так как это немного смешная ошибка, но это спасает кого-то несколько часов, глядя на экран, я мог бы получить рождественскую открытку в этом году (или, по крайней мере, рассказать Санта что я был хорошим мальчиком)

Смежные вопросы