我正在尝试在Firebase上更新此文档,该文档第一次可以使用,但之后却出现此错误:
Error: Can't set headers after they are sent
此按钮可切换值:
getActionButtons = () => {
if(this.state.stepIndex > 2){
return (<ActionButtons>
<ActionButton label={this.state.userType === 'Rider' ? this.state.available ? 'Found a carpool?' : 'look for carpool' : this.state.available ? 'Car is Full?' : 'Available for carpool'} primary={!this.state.available} secondary={this.state.available} onClick={() => {
console.log("eventId: ", this.props.eventId.event)
console.log("userId: ", firebase.auth().currentUser.uid)
// firebase.database().ref('/' + this.props.eventId.event + '/posts/' + firebase.auth().currentUser.uid).transaction((post => {
// if (post) {
// if (post.available) {
// post.available = !post.available
// } else {
// post.available = this.state.available
// }
// }
// return post;
// }))
firebase.database().ref('/' + this.props.eventId.event + '/posts/' + firebase.auth().currentUser.uid + '/available').set(!this.state.available)
this.setState({
available: !this.state.available
});
this.props.update();
}}/>
</ActionButtons>)
}
}
服务器代码:
const activeRoute = routes.find(route => matchPath(req.url, route)) || {}
const isEventPage = activeRoute.name === "carpoolingPage"
app.get("*", (req, res, next) => {
if(isEventPage) {
if (req.params[0]) {
let eventRef = firebase.database().ref(req.params[0])
eventRef.on("value", (snapshot) => {
const event = snapshot.val()
// console.log("event: ", event)
if(!event)
res.redirect("/eventnotfound")
else {
const { title, location, description } = event
const preloadedState = { currentEvent: event }
const store = configureStore(preloadedState)
const markup = generateMarkup(store)
res.send(HTML({
title: `Carpooling to ${ title }`,
markup, styleTags,
preloadedState,
ogTitle: `Carpooling to ${ title }`,
ogDescription: `Find people to carpool with to ${ title }. Choose to ride or drive to ${ location } ${ description === null ? '' : `Event Description: ${ description }`}`
}))
}
})
}
}
else {
const store = configureStore()
const markup = generateMarkup(store)
res.send(HTML({ markup, styleTags }))
}
})
我将SSR与Node和React结合使用,而快速服务器仅使用cors()。
仅供参考,它会在Firebase上正确切换值,即服务器退出并出现错误,导致上面的代码无法运行。
顺便说一句,我试图使用Firebase事务,并尝试在Firebase行之后删除代码,但是它给出了相同的错误。
在堆栈溢出时,我遵循了所有类似的问题,但是与我的问题不匹配。
答案 0 :(得分:1)
我确定eventRef.on("value", ...)
发生了不止一次。并且您的res.redirect
或res.send
被多次调用。明确地说,如果您回复一次,就无法再回复。希望这能解决您的问题。
将evetRef.on
更改为eventRef.once
。这样可以解决您的问题。