【发布时间】:2019-01-23 00:48:13
【问题描述】:
我已经研究这个问题几个小时了,发现了一些奇怪的东西。使用 ExpressJS、Firebase 和 React 的小应用程序,需要通过 Express Backend 调用 Firebase 数据库,我还需要通过 Express Backend 发出 post 请求将数据存储在数据库中。
功能:我向后端发出 post 请求以将数据添加到数据库。由于 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());
})
})
【问题讨论】:
-
我在下面写了一个快速回答来解释
on和once之间的区别,以及为什么on可能会发送多个响应。如果您在使用once时仍然遇到问题,请编辑您的问题以解释该问题到底是什么。
标签: node.js reactjs firebase express firebase-realtime-database