2017-05-18 5 views
0

私は更新してユーザーに表示するために自分のコードを試しています。基本的に私はそれがのために私の解像度に関係していると思う、私が何をする必要があるか行うことができるが、それを実行した後、私はエラーが発生し続ける:送信後にヘッダーを設定できない

C:\Users\tester01_2\myproject\node_modules\mongodb-core\lib\cursor.js:174 throw err; ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11) at ServerResponse.header ( C:\Users\tester01_2\myproject\node_modules\express\lib\response.js:725:10) at ServerResponse.send (C:\Users\tester01_2\myproject\node_modules\express\lib\response.js:170:12) at C:\Users\tester01_2\myproject\dbUpdate.js:13:14 at C:\Users\tester01_2\myproject\dbUpdate.js:28:5 at handleCallback (C:\Users\tester01_2\myproject\node_modules\mongodb- core\lib\cursor.js:171:5) at nextFunction (C:\Users\tester01_2\myproject\node_modules\mongodb- core\lib\cursor.js:682:5) at Cursor.next [as _next] (C:\Users\tester01_2\myproject\node_modules\mongodb- core\lib\cursor.js:692:3) at loop (C:\Users\tester01_2\myproject\node_modules\mongodb\lib\cursor.js:694:8) at _each (C:\Users\tester01_2\myproject\node_modules\mongodb\lib\cursor.js:741:16)

このエラーが出るこれは私のコード

var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert'); 
var url = 'mongodb://localhost:27017/myproject'; 

module.exports = { 

postCollection : function(req, res){ 
    var issueQty = req.body.issueQty; 
    var itemDescrip = req.body.itemDescrip; 
MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    updateRecord(db, req, function(doc) { 
    return res.send('Record Found. Now updating this document...' + 
itemDescrip + ' Record Updated. This is the new record ' + doc) 
    res.end(); 
    db.close(); 
    }); 

}); 
} 
} 
var updateRecord = function(db, req, callback) { 
var cursor = db.collection('documents').find({'Item Description': 
req.body.itemDescrip, 'Issued QTY': req.body.issueQty}) 
cursor.each(function(err,doc){ 
    assert.equal(err, null); 
    if(doc != err){ 
     console.log('Successfully queried'); 
     console.log(doc); 
     callback(JSON.stringify(doc)); 

    } else{ 
     throw err; 
    } 
    }); 
db.collection('documents').updateMany(
    { 'Item Description': req.body.itemDescrip}, 
    { 
    $set: { 'Issued QTY': req.body.issueQty } 
    },function(err, results) { 
    console.log(results); 
    console.log('Done'); 
    console.log(results); 

}); 
}; 

です私が見たすべてのスレッドは、間違った位置にあることが判明しましたが、res.sendをそこに入れて、docを使用できるようにする必要があります。この問題を解決する方法はありますか?ありがとう。

答えて

0

まず、res.send()の前のreturnを削除してください。

第2に、updateRecord関数では、callback関数をループで呼び出すべきではなく、複数回実行されるべきです。 updateManyを実行する前に、データベースを閉じます。

docを送信する場合は、一時配列を使用してdocを保持し、updateRecordのすべてのロジックを終了したらresに渡す必要があります。

私が正しくあなたを理解していれば、次は、私はまだそれに同じエラーを取得し

var MongoClient = require('mongodb').MongoClient; 
var url = 'mongodb://localhost:27017/myproject'; 

var updateRecord = function(db, req, callback) { 
    db.collection('documents').updateMany({ 'Item Description': req.body.itemDescrip }, { 
     $set: { 'Issued QTY': req.body.issueQty } 
    }, function(err, results) { 
     if (err) return callback(err); 
     console.log('Done'); 
     console.log(results); 
     var cursor = db.collection('documents').find({ 
      'Item Description': req.body.itemDescrip, 
      'Issued QTY': req.body.issueQty 
     }); 
     var temp = []; 
     cursor.each(function(err, doc) { 
      if (err) { 
       return callback(err); 
      } 
      console.log('Successfully queried'); 
      console.log(doc); 
      temp.push(JSON.stringify(doc)); 
     }); 
     callback(null, temp); 
    }); 
}; 

module.exports = { 
    postCollection: function(req, res) { 
     var issueQty = req.body.issueQty; 
     var itemDescrip = req.body.itemDescrip; 
     MongoClient.connect(url, function(err, db) { 
      if(err) { 
       res.send(err); 
       res.end(); 
       db.close(); 
       return; 
      } 
      updateRecord(db, req, function(err, docs) { 
       if(err){ 
        res.send(err); 
       } 
       else{ 
        res.send(docs); 
       } 
       res.end(); 
       db.close(); 
      }); 

     }); 
    } 
} 
+0

、あなたのコードの私の変形例です。 @YiKai –

+0

@OngKongTat答えを更新しました。あなたのupdateRecord関数を2回確認してください。 –

+0

申し訳ありませんが、私はあなたがループを意味するものを実際には得られません。私はちょっと混乱しているので、どのようにdb.close()を置くべきかを知っていますか? –

関連する問題