Задать вопрос
Alexandr220
@Alexandr220
developer

Node js: Error: Can't set headers after they are sent что произошло?

ошибка:
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)

код вот :
exports.Load = function (req, res, next)  {
	
var bodyParser = require('body-parser');   
var crypto = require('crypto');
var Connection = require('tedious').Connection; 
var _ = require('underscore');

var Request = require('tedious').Request;  
var TYPES = require('tedious').TYPES; 

if (!req.params.data ){
res.setHeader('Access-Control-Allow-Origin');
    res.send('{"error":"invalid data"}'); 
    next();
}else{
        
var obj = JSON.parse(req.params.data);
var ini_uid = obj.uid;
var ini_key = obj.key;
     
var connection = new Connection(config); 
  connection.on('connect', function(err){
     if(err){
    console.log(err);
   next();    
    }else{
        var request = new Request("SELECT *  FROM ТУТ WHERE ВОТ", function(err, rowCount, rows){
         connection.close();
          next();  
        })
        request.on('row', function(columns) {

if(columns[11].value == ini_key){

///
var connection = new Connection(config); 
connection.on('connect', function(err) { 

request = new Request("SELECT * FROM ВОТ ЭТО WHERE ВОТ ТАКОЕ ORDER BY ЧТО-ТО DESC ", function(err, rowCount) { 
connection.close(); 
}); 
request.on('row', function(columns) { 
 res.setHeader('Access-Control-Allow-Origin');
 res.json({error: columns });
  return next();


}); 
connection.execSql(request); 
});

}else{
 res.json({error: "invalid data" });
res.setHeader('Access-Control-Allow-Origin');
  return next();
}

        })
     connection.execSql(request);
    }

  })

}
return;
};
  • Вопрос задан
  • 13940 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Ошибка говорит о том, что у вас express пытается ответить с заголовком (в стиле "Статус 200" - все ок).
Проблема в том, что у вас уже был ответ, и еще раз ответить он не может. Дословно: не могу установить заголовки, после того, как они отправлены.

Решение, всегда использовать ключевое слово return, когда вы "отвечаете". В вашем примере это либо res.json, либо next. Суть в этом.
Пример из api:
d4b2dd2981684414a39e31573f403b77.jpg
Если убрать return, то в случае ошибки, мы попадем в if (err) ..., ответим как ошибка(400), и не выйдем из роутинг функции, пойдем ниже и ответим как успешно(200) - и бам-с, получим ошибку - не могу установить заголовки...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы