Я новичок в экспресс js, я сделал api для своего музыкального приложения из экспресс и 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.info("listening at port 4000..."))
Вот как выглядит моя база данных:
И каждый раз, когда значение views изменяется, оно отвечает одним и тем же данным.
Когда значение базы данных не изменяется:
При изменении значения базы данных:
Как вы можете видеть, то же самое повторно посылает.
Я не вижу весь ваш код, поэтому я не могу быть уверен на 100%, но я подозреваю, что это происходит из-за того, что вы постоянно добавляете элементы в trendingTracks, но на самом деле вам нужно очищать его каждый раз, когда вы запускаете функцию Trending.
Поэтому добавьте 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))
})
Я рад, что это помогло! Пожалуйста, также примите мое решение (нажмите на галочку под кнопками голосования). Спасибо! :)
В Stack Overflow, пожалуйста, не показывайте изображения текста и кода. Скопируйте текст в сам вопрос и отформатируйте его так, чтобы его было легко читать, копировать и искать. Вы можете отредактировать вопрос, чтобы исправить это, используя ссылку редактирования внизу.