2017-05-07 20 views
0

Koa 2의 비동기 함수를 사용하고 있습니다.Koa js : Err : 보낸 후 헤더를 설정할 수 없습니다. mongoDB

다음과 같은 오류가 발생합니다.

events.js:163 1:56 PM throw er; // Unhandled 'error' event 1:56 PM ^ 1:56 PM 1:56 PM Error: Can't set headers after they are sent. 1:56 PM at ServerResponse.setHeader (_http_outgoing.js:371:11) 1:56 PM at Object.set (/app/node_modules/koa/lib/response.js:440:16) 1:56 PM at Object.redirect (/app/node_modules/koa/lib/response.js:261:10) 1:56 PM at Object.proto.(anonymous function) [as redirect] (/app/node_modules/delegates/index.js:40:31) 1:56 PM Jump to at url.findOne (/app/server.js:126:9) 1:56 PM at model.Query. (/app/node_modules/mongoose/lib/model.js:3737:16) 1:56 PM at /app/node_modules/kareem/index.js:277:21 1:56 PM at /app/node_modules/kareem/index.js:131:16 1:56 PM at _combinedTickCallback (internal/process/next_tick.js:73:7) 1:56 PM at process._tickCallback (internal/process/next_tick.js:104:9) 1:56 PM 6 minutes ago

이것은 내 코드의 일부입니다.

async function red(ctx) { 
    let redurl = "//url here"; 
    url.findOne({ shortenedLink: redurl }, (err, data) => { 
    //find if short url matches long url in db 
    if (err) throw err; 
    if (data) { 
     //if matches then redirect to long url 
     ctx.redirect(data.url); //getting the error here 
     console.log("matched"); 
    } else console.error("--"); 
    }); 
} 

내 전체 코드는 here입니다.

답변

1

async 기능을 사용하는 경우 async /`await? 패턴과 콜백을 사용하지 않습니다. 내가 앞으로 내 코드에 sendStatus 기능을 체인에 사용 된 바와 같이 나는이 같은 문제가 발생했다

async function red(ctx) { 
    let redurl = "//url here"; 
    try { 
     data = await url.findOne({ shortenedLink: redurl }) 
     if (data) { 
     ctx.redirect(data.url); //getting the error here 
     console.log("matched"); 
     } else { 
     console.error("--"); 
     } 
    } catch (err) { 
     throw err; 
    } 
} 
0

: 그래서 당신처럼 전화를 다시 작성해야합니다.

Country.count({ name: name }, (error, count) => { 
     if (count > 0) { 
      console.log(count); 
      error = name + alreadyExists; 
      res.sendStatus(500).sendStatus(500); 
     } 
}); 

추가 sendStatus을 제거하면 내 문제가 해결됩니다.

Country.count({ name: name }, (error, count) => { 
     if (count > 0) { 
      console.log(count); 
      error = name + alreadyExists; 
      res.sendStatus(500); 
     } 
});