2016-07-11 2 views
0

Когда я пытаюсь обновить пользователя, используя веб-форму, он запускает приложение app.post on express. Пользователь объект правильно, но иногда он выдает ошибку в узле консолиОбновление 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

Ошибка не вытекает из самой инструкции обновления, исходящей из вашей функции обратного вызова.

В частности, эти строки кода.

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

Что вы делаете, если есть ошибка отправки статуса 400, а затем отправить статус 201. Проблема заключается в том, как только вы отправить ответ с вашими заголовками к запрашивающим вы не можете попытаться установить заголовки снова.

Так что ваш код должен измениться:

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

Таким образом, если возникает ошибка пошлет 400 ответа в противном случае вы будете посылать 201 ответ вместо того, чтобы отправить 400 в ответ, а затем 201 ответ незамедлительно после.

Смежные вопросы