我正在尝试创建基本的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?
很可能是因为在'/'端点你调用'res.sendFile'和'res.render'。你不应该为一个请求发送两个响应。 –