[英]Expressjs Firebase React Redux Cannot set headers after they are sent to the client
我已经研究这个问题了几个小时,发现有些奇怪。 为小型应用程序使用ExpressJS,Firebase和React,并且需要通过Express Backend调用Firebase数据库,我还需要发出发布请求以通过Express Backend将数据存储在数据库中。
功能 :我向后端发出发布请求,以将数据添加到数据库。 由于Firebase是实时数据库,因此数据将立即反映在页面上。
问题 :问题是,当我对后端进行post调用并完成时,页面刷新,但由于此错误而导致数据不显示: [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头
/**
* Add new note to Firebase
* Real-Time Database
*/
app.post('/addNote', (req, res)=> {
var title = req.body.note.title;
var body = req.body.note.body;
var userId= req.body.note.uid;
db.notes.push({
title: title,
body: body,
uid: userId
})
res.send("Success")
})
app.get('/all', (req, res, next)=> {
db.notes.on('value', snapshot => {
return res.send(snapshot.val());
})
})
可能的解决方案 :我发现使用下面的代码,我可以发出发布请求, 手动刷新页面,并且数据将无标题错误地反映出来。 我正在尝试编写适当的功能代码,但似乎无法弄清楚代码在哪里发送db.notes.on多个响应,因为我只发送一次res.send。 明显的区别是(.on可以立即侦听和更新,而.once需要手动刷新)
/**
* Add new note to Firebase
* Real-Time Database
*/
app.post('/addNote', (req, res)=> {
var title = req.body.note.title;
var body = req.body.note.body;
var userId= req.body.note.uid;
db.notes.push({
title: title,
body: body,
uid: userId
})
res.send("Success")
})
app.get('/all', (req, res, next)=> {
db.notes.once('value', snapshot => {
return res.send(snapshot.val());
})
})
Firebase的on("value"
侦听器将触发:
由于您是将响应中的数据发送给#1中的客户端,因此#2发生时,响应将被关闭/完成。
通过使用once("value"
侦听器)不会发生此问题,因为once()
会在#1之后删除侦听器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.