#javascript #node.js #firebase #express #firebase-realtime-database
# #javascript #node.js #firebase #экспресс #firebase-realtime-database
Вопрос:
Я новичок в express js, я создал api для своего музыкального приложения из express и firebase, который принимает данные из firebase и принимает запрос и отправляет данные в качестве ответа. Но есть проблема, которая портит программу. Каждый раз, когда изменяется значение ( Views
музыки) firebase, он повторно отправляет один и тот же ответ.
вот мой код
app.use(cors())
let trendingTracks = []
let data;
function Trending(data){
if (data){
Object.values(data).forEach((value)=>{
if(value.views < 10){
trendingTracks.push(value)
}
})
}
}
function SortPopular(a){
for(let i = 0; i<=a.length; i ){
for (let j = i 1; j<a.length; j ){
if(a[i].views>a[j].views){
const temp = a[i]
a[i]=a[j]
a[j]=temp
}
}
}
return a
}
firebase.database().ref("public/songs").on("value", snapshot =>{
data = snapshot.val();
Trending(data)
})
app.get("/api/home/trending", (req, res)=>{
res.send(SortPopular(trendingTracks))
})
app.listen(4000, ()=>console.log("listening at port 4000..."))
Вот как выглядит моя база данных:
И при каждом изменении views
значения он повторно отвечает на одни и те же данные.
Когда значение базы данных не изменяется:
При изменении значения базы данных:
Как вы можете видеть, повторно отправляется то же самое.
Комментарии:
1. При переполнении стека, пожалуйста, не показывайте изображения текста и кода. Скопируйте текст в сам вопрос и отформатируйте его так, чтобы его было легко читать, копировать и искать. Вы можете отредактировать вопрос, чтобы исправить это, используя ссылку редактирования внизу.
Ответ №1:
Я не вижу весь ваш код, поэтому я не могу быть уверен на 100%, но я подозреваю, что это происходит потому, что вы постоянно добавляете элементы trendingTracks
, но на самом деле вам нужно очищать его при каждом запуске Trending
function .
Поэтому добавьте trendingTracks = []
, как здесь:
app.use(cors())
let trendingTracks = []
let data;
function Trending(data){
if (data){
trendingTracks = [] // NEW
Object.values(data).forEach((value)=>{
if(value.views < 10){
trendingTracks.push(value)
}
})
}
}
function SortPopular(a){
for(let i = 0; i<=a.length; i ){
for (let j = i 1; j<a.length; j ){
if(a[i].views>a[j].views){
const temp = a[i]
a[i]=a[j]
a[j]=temp
}
}
}
return a
}
firebase.database().ref("public/songs").on("value", snapshot =>{
data = snapshot.val();
Trending(data)
})
app.get("/api/home/trending", (req, res)=>{
res.send(SortPopular(trendingTracks))
})
Комментарии:
1. Я рад, что это помогло! Пожалуйста, также примите мое решение (нажмите на символ галочки под кнопками голосования). Спасибо! 🙂