2016-09-01 3 views
0

노드 js를 사용 중입니다. 또한 다른 제 3 자 코랩 URL을 요청하고 있습니다.Nodejs + 보낸 후 헤더를 설정할 수 없습니다.

이 코드를 실행하면 오류가 발생합니다. 보낸 후 헤더를 설정할 수 없습니다.

돈을 내가 잘못했는지 알아.

FYR : https://github.com/mcollina/node-coap

코드 :

var app = require('express'); 
var router = app.Router(); 
var coap = require('coap'); 
var Q = require('q'); 
router.get('/test', function(req, res, next) {  
    var result = { 
     resp : {}, 
    };  
    Q(result).then(function(result) { 
     var deferred = Q.defer();  
     var coapConnection = { 
      host : 'abcd.com', 
      pathname : '/get', 
      method : 'GET', 
      port : '5683', 
      confirmable : true 
     }; 
     var req = coap.request(coapConnection); 
     req.write(JSON.stringify(result.body)); 
     req.on('response', function(response) { 
      var d = response.payload; 
      result.resp.response = JSON.parse(d.toString('utf8')); 
      deferred.resolve(result); 
      response.pipe(process.stdout); 
      response.on('end', function() { 
       //process.exit(0); 
       res.send(result.resp); 
      }); 
     }); 
     req.end(); 
     return deferred.promise; 
    }).then(function(result) { 
     result.resp.status = 'Success'; 
     res.send(result.resp.response); 
    }).fail(function(result) { 
     result.resp.status = 'Error'; 
     res.send(result.resp); 
    }); 

}); 

module.exports = router; 

ERROR :

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.res.set.res.header (test/node_modules/express/lib/response.js:524:10) 
    at ServerResponse.res.json (test/node_modules/express/lib/response.js:189:36) 
    at ServerResponse.res.send (test/node_modules/express/lib/response.js:118:21) 
    at IncomingMessage.<anonymous> (test/routes/coap/trigger.js:111:9) 
    at IncomingMessage.emit (events.js:129:20) 
    at endReadableNT (test/node_modules/coap/node_modules/readable-stream/lib/_stream_readable.js:865:12) 
    at afterTickTwo (test/node_modules/coap/node_modules/readable-stream/node_modules/process-nextick-args/index.js:27:10) 
    at process._tickCallback (node.js:355:11) 

사람이이 문제에 대한 해결책을주십시오. 감사합니다. .

답변

0

문제가 일 가능성이 있습니다. 사이트를 여러 번 만드는 것입니다. 오류는 헤더 (ergo, page)가 이미 만들어져 있고 다시 작성하려고한다는 것을 의미합니다.

response.on('end', function() { 
    //process.exit(0); 
    res.send(result.resp); 
}); 

과 충돌 : 후자의 시도가 초기 res.send()

1

errror 메시지를 번복하기 때문에

.then(function(result) { 
    result.resp.status = 'Success'; 
    res.send(result.resp.response); 
}) 

당신 있음을 알려줍니다

여기 범인이 코드 것 당신이 allready 클라이언트에 재생을 보내면 헤더를 설정하려고합니다. 귀하의 경우 문제는 res.send가 2 번 호출되어야한다는 것입니다. resposnse 이벤트가 호출되고 나면 다시 전송됩니다.

Express는이 경우 nodejs와 약간 다른 방식으로 작동합니다.

관련 문제