Я пытаюсь обновить этот документ на 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.info("eventId: ", this.props.eventId.event)
console.info("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.info("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, но он дает ту же ошибку.
Я следил за всеми подобными вопросами о переполнении стека, но это не соответствует моей проблеме.
Вы бы проверили это сейчас?
У вас есть другие вызовы API?
Можете ли вы проверить ошибку один раз. И посмотрите, в какой строке код ломается?
нет только это ..
ломается после обновления чего-то на firebase
Я не знаю огневую базу. Но я уверен, что eventRef.on("value", ...) встречается более одного раза. И вашему res.redirect или res.send звонят более одного раза. В экспрессе, если вы ответили один раз, вы не сможете ответить снова. Надеюсь, это решит вашу проблему.
Братан Эта подсказка мне помогла. Я заменил ее однажды, не могли бы вы вставить ее в качестве ответа, чтобы отдать должное. Подпишу как правильный ответ.
Отлично. Я добавил это как ответ





Я уверен, что eventRef.on("value", ...) встречается более одного раза. И вашему res.redirect или res.send звонят более одного раза. В экспрессе, если вы ответили один раз, вы не сможете ответить снова. Надеюсь, это решит вашу проблему.
Сделайте evetRef.on на eventRef.once. Это решит вашу проблему.
Ошибка точно из кода Express.js. Вы можете поделиться кодом этого маршрута?