2016-07-11 2 views
0

웹 양식을 사용하여 사용자를 업데이트하려고하면 express의 app.post가 실행됩니다. 개체의 사용자는 정확하지만 때로는 노드 콘솔에서 노드 콘솔mongodb 업데이트에서 치명적인 오류가 발생했습니다

app.post('/register/update', jsonParser, (request, response) => { 
    let user = request.body.user; 
    let users = mongoUtil.users(); 

    console.log(user); 

    users.update({email: user.email}, user, (err, res) => { 
    if(err) { 
     response.sendStatus(400); 
    } 
    response.sendStatus(201); 
    }); 
}); 

에서 오류가 발생합니다 :

{ _id: '578246ec9eb0587a5d67b8c9', 
    email: '[email protected]', 
    zipcode: '1231-123', 
    companyName: 'test', 
    tradeName: 'test', 
    contactName: 'Test', 
    tel: '(14) 1232-1231', 
    password: 'test', 
    passwordConfirm: 'test', 
    adress: 'test', 
    adressComplement: 'test', 
    adressNumber: '123' } 
/home/ec2-user/ ... /mongodb/lib/utils.js:98 
    process.nextTick(function() { throw err; }); 
           ^

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11) 
    at ServerResponse.header (/home/ec2-user/ ... /node_modules/express/lib/response.js:719:10) 
    at ServerResponse.contentType (/home/ec2-user/ ... /node_modules/express/lib/response.js:552:15) 
    at ServerResponse.sendStatus (/home/ec2-user/ .. /node_modules/express/lib/response.js:340:8) 
    at users.update (/home/ec2-user/menuWebApp/server/app.js:94:14) 
    at handleCallback (/home/ec2-user/ ... /node_modules/mongodb/lib/utils.js:96:12) 
    at /home/ec2-user/ ... /node_modules/mongodb/lib/collection.js:1008:42 
    at commandCallback (/home/ec2-user/ ... /node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:1194:9) 
    at Callbacks.emit (/home/ec2-user/ ... /node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:119:3) 
    at Connection.messageHandler (/home/ec2-user/ ... /node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:358:23) 

아마 콜백 문제를 다루고있어,하지만 난 생각이없는 그것을 해결하는 방법 D :

답변

1

오류는 콜백 함수에서 오는 업데이트 문 자체로부터 오는 것이 아닙니다.

특히 이러한 코드 라인. 오류는 요청자에게 당신의 헤더와 응답을 보내 당신이 시도하고 설정할 수 없습니다 일단 문제가 상태 (201)를 전송 한 후, 상태 (400)를 보낼 수있는 경우

if(err) { 
    response.sendStatus(400); 
} 
response.sendStatus(201); 

당신이하고있는 것은 다시 헤더. 201 응답 한 후 오류가 발생하면

if(err) { 
    response.sendStatus(400); 
}else{ 
    response.sendStatus(201); 
} 

그래서 당신은 400 응답을 보낼 것이다, 그렇지 않으면 당신은 400 응답을 보내려고의 201 응답을 대신 보낼 것이다 :

그래서 당신의 코드에 변경해야 직후.

관련 문제