2017-05-01 76 views
0

我正在嘗試創建基本的CRUD應用程序並在調試時遇到問題。要構建我的CRUD應用程序,我正在使用node.js,express和mongodb。任何你可以提供的幫助將會非常有幫助。Express/node.js調試錯誤:發送後無法設置標題

方面:參考我使用這個:

https://zellwk.com/blog/crud-express-mongodb/, currently on "Showing quotes to users" 

我的問題:我得到我的代碼下面的錯誤,我不知道這是由於我的代碼的位置。

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11) 
    at ServerResponse.header (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:725:10) 
    at ServerResponse.contentType (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:558:15) 
    at ServerResponse.send (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:145:14) 
    at done (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:962:10) 
    at tryHandleCache (C:\Users\hcqph\gitprojects\crudbeta\node_modules\ejs\lib\ejs.js:208:10) 
    at View.exports.renderFile [as engine] (C:\Users\hcqph\gitprojects\crudbeta\node_modules\ejs\lib\ejs.js:412:10) 
    at View.render (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\view.js:128:8) 
    at tryRender (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\application.js:640:10) 
    at EventEmitter.render (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\application.js:592:3) 

這是我的代碼:

app.use(bodyParser.urlencoded({extended: true})) 

//set 'ejs' template engine, and default extension is ejs 
app.set('view engine', 'ejs') 

/* -------- for team documentation -------- 
=> = replacement for function 

app.get hand a GET request (read operation) 
------------------------------------------------ */ 
app.get('/', (req, res) => { 
    //serves index.html back to browser 
    res.sendFile(__dirname + '/index.html') 

    //gets list of trips from mlab.com 
    var cursor = db.collection('trips').find() 

    //retrieves list of trips retrieved from mlab 
    db.collection('trips').find().toArray(function(err, results) { 
     if(err) return console.log(err) 

     //renders index.ejs 
     res.render('index.ejs', {trips:results}) 
    }) 
}) 



/* app.post handles a create request */ 
app.post('/trips', (req, res) => { 
    db.collection('trips').save(req.body, (err, result) =>{ 
     if (err) return console.log(err) 

     console.log('saved to database') 
     res.redirect('/') //causes browser to reload 
    }) 
}) 

是不是因爲我打我的app.set在哪裏?我怎樣才能解決這個問題?

另外,如果它嵌套在文件夾視圖中,我是否正確引用了我的res.render for index.ejs?

+1

很可能是因爲在'/'端點你調用'res.sendFile'和'res.render'。你不應該爲一個請求發送兩個響應。 –

回答

1

You cannot send two responses for one request

remove one of the lines of your code:

EITHER

  • res.sendFile(__目錄名+ '/index.html')

OR

  • res.render( 'index.ejs', {trips:results})

What's happening in your code:

/ GET請求被解僱節點重定向到index.html文件但接下來的同時執行和呈現到index.ejs文件導致錯誤,因爲節點已經現在發送響應,它不能再次響應先前的請求發送標題。

所以你刪除了上面提到的行之一。

+0

謝謝!我刪除res.sendFile,它終於工作。我真的很感激你的意見。 – Clark

相關問題