2017-04-24 4 views
1

콘솔 오류가 발생했을 때 루트에 몇 가지 기본 인증이 있습니다.헤더를 설정할 수 없습니다.

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) 
    at ServerResponse.header 

"if"문이 true 일 때만 발생합니다 (if 문 내의 코드가 실행 됨). 실행되지 않으면 오류가없고 "홈"보기가 오류없이 렌더링됩니다.

routes.get('/scan', (req, res, next) => { 
    const orderID = req.query.order; 
    const token = req.query.token; 

    if (!hasAccess(token)) 
     res.status(401).send('Unauthorized'); 

    res.render('home', {order}); 
}); 
+1

업데이트'res.status (401) 이후에 반환하는 코드 .send ('무단'); ', 그렇지 않으면 당신은 응답을 보내려고하고 페이지마다 렌더링합니다 시각. – Ken

답변

1

당신은 중복 응답 전송을 방지하기 위해 res.status(401).send('Unauthorized');return;을 추가해야합니다.

2

요청에 두 번 이상 응답하려고하면이 오류가 발생합니다.

이러한 종류의 오류가 발생하지 않도록하려면 응답을 보낼 때 return을 입력해야 함수가 계속되지 않습니다. 귀하의 경우에는

:

routes.get('/scan', (req, res, next) => { 
    const orderID = req.query.order; 
    const token = req.query.token; 

    if(!hasAccess(token)) 
    return res.status(401).send('Unauthorized'); 
    return res.render('home', {order}); 
}); 
+0

함수의 마지막에서 리턴하는 ('return res.render (...)') 것은 유용하지 않으며 생략 될 수 있습니다. – mscdex

+1

나는 동의한다. 그러나 습관이나 테일 콜 최적화를 특정 컴파일러에서 사용하는 것은 일반적이다. –

+0

누락); routes.get() 호출이 끝날 때. – Ken

관련 문제