如何使用节点JSredirect?

我正在尝试在提交表单后将页面redirect到我的主页(使用path'/ search')。 在我的submit.html文件中,我有一个表单,当按下提交button时,表单中的数据通过“/ submit”提交方法提交。 在我的index.js文件中,我有一个'/ submit'的get和post函数,以便我可以访问MongaDB和集合。 这里是function:

 //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:sillydoo@ds059195.mlab.com: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'); 并返回错误:错误:发送后无法设置标头。 经过研究,我意识到这个错误正在发生,因为我处于正文或完成状态。 然而,我不知道我需要写什么,而是将页面redirect到我的“/search”路线或在哪里我可以写res.redirect('/search')以便它不会返回此错误。

任何帮助是极大的赞赏! 先谢谢你!

replaceres.send(''); 在使用res.redirect('/search');insertDocumentcallbackres.redirect('/search'); 。 如果你不想等待数据库的东西完成,只是删除res.send('');

检查这个答案 ,你不能发送多个响应。

在这里,如果没有必要删除res.send

这是因为你正在发送响应两次。 一个在

 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.send ,你会没事的。 一定要确保你只发送一次回应。