2016-07-11 3 views
0

Webフォームを使用してユーザーを更新しようとすると、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応答を代わりに400応答を送信しようとしているの201応答を送信します400応答を送信しますので、

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

直後。

関連する問題