Firebase и Express, мой api отправляет повторяющийся ответ каждый раз, когда изменяется значение firebase

#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. Я рад, что это помогло! Пожалуйста, также примите мое решение (нажмите на символ галочки под кнопками голосования). Спасибо! 🙂