2016-03-24 8 views
1

フォームを送信した後、私のホームページ(ルート '/ search')にページをリダイレクトしようとしています。私のsubmit.htmlファイルでは、フォームがあり、送信ボタンを押すとフォームのデータは '/ submit'ポストメソッドを使って送信されます。私のindex.jsファイルでは、私はMongaDBとコレクションにアクセスできるように、 '/ submit'のgetとpost機能を持っています。ここでの機能は以下のとおりです。ノードJSを使用してリダイレクトする方法は?

//getting info from the database 
router.get('/submit', function(req, res) { //RETURN JSON OF INTINERARIES 
    var db = req.db; //Creates a variable called db, which equals the database called db (db holds the collegelist collection) 
    var collection = db.get('collegelist'); //Creates a variable called collection which accesses the collection called collegelist 
}); 

router.post('/submit', function(req, res){ 
    var url = 'mongodb://localhost:27017/maptest'; //IDENTIFIES THE MONGO DB 
    //var url = 'mongodb://dbuser2:[email protected]:59195/heroku_vmz14q76'; 

    function insertDocument(db, record, callback) { //this creates a function to insert data into collegelist 
    db.collection('collegelist').insertOne(record, 
    function(err, result) { 

     assert.equal(err, null); //error must equal null 
     console.log("Function for inserting a document."); 

     callback(result); //calling back on the result? 
    }); 
    }; 

    //this grabs the data from the form using ids and assigns it to the parameters in the collegelist database 
    req.body['name'] = req.body.name; //INSERTING THE EMAIL INTO THE FIELDS THAT ARE COLLECTED 

    //connects to the mongodatabase (the variable url equals the database -- either mongolab or local) 
    MongoClient.connect(url, function(err, db) { //MONGO CLIENT IS CONNECTING TO THE URL -- TWO POSSIBLE OUTCOMES: ERROR OR THE DB 
    assert.equal(null, err); //ERROR MUST BE NULL FOR THE PROGRAM TO CONTINUE 
    insertDocument(db, req.body, function(result) { //this calls on the insert document function I just created 
     //RECORD IS CALLED REQ.BODY IN THE LINE ABOVE 
     db.close(); //CLOSE CONNECTION WITH THE DB 
     console.log("DB Result :", result); //LOGGING IT! 
     //ALL THE CODE IN THIS ANNONYMOUS FUNCTION IS THE CALLBACK IN THE INSERTDOCUMENT FUNCTION 
     res.send(''); 
    }); 
}) 

res.redirect('/search'); 
//res.render('search', { username: req.user.givenName }); 

}); 

私はres.redirect('/search');を呼び出そうとし、それがエラーを返し、関数の終了時:エラー:それらが送られた後、ヘッダーを設定することはできません。研究をした後、私はBodyまたはFinished状態にあるため、このエラーが発生していることを認識しました。しかし、ページを自分の '/ search'ルートにリダイレクトするために書く必要があるか、res.redirect('/search')を書き込んでこのエラーを返さないようにすることができません。

ご協力いただきありがとうございます。前もって感謝します!

答えて

1

insertDocumentコールバックにres.send('');を置き換えます。 DBの処理が完了してから完了するまで待たずにres.send('');

2

Check this answer複数回答を送信することはできません。ここで

ことが必要

1

はない場合、あなたは二回の応答を送信しているためであるres.sendを削除します。

res.redirect('/search'); 

として

console.log("DB Result :", result); //LOGGING IT! 
    //ALL THE CODE IN THIS ANNONYMOUS FUNCTION IS THE CALLBACK IN THE INSERTDOCUMENT FUNCTION 
    res.send(''); 

と下部に1つ1つがres.sendを削除し、あなたは大丈夫です。必ず一度だけ返信してください。

関連する問題