Zduplikowane wpisy w XML

0

Cześć,

Przygotowałem obsługę błędów po stronie serwera Node.js i chce wyświetlać wyniki po stronie klienta wykorzystując plik XML :

const builder = require('xmlbuilder')
const doc = builder.create('error')
const fs = require('fs')
const paths = require('./paths')
// Creating XML with errors
module.exports.show = function (JobID, IdOrder, serverError, src) {
    console.log(JobID, IdOrder, serverError, src)
    if (serverError > 100) {
        switch (serverError) {
            case 101:
                serverError = "Błąd programu : zły parametr"

                break
            case 102:
                serverError = "Błąd programu : złe polecenie"
        }
    } else {
        serverError = "Nieznany błąd"
    }
    doc.ele('errors')
        .att('src', src)
        .txt(serverError)
        .end({ pretty: true })
});

    console.log(doc.toString())
    const xmlPath = paths.files(IdOrder, JobID, "reportXML")
    fs.writeFileSync(xmlPath, doc.toString())
}
PLIK XML:
<error><errors src="files">Błąd programu : złe polecenie.</errors></error>

W zasadzie wszystko działa ale problem pojawia się w momencie ponownego wywołania powyższej funkcji bo wpis jest dodawany a nie zastępowany. Nie to jest najlepsze. Przed wywołaniem funkcji usuwam plik XML który wcześniej utworzyłem (fs.unlink), odświeżam stronę klienta ale nie restartuję serwera a wpisy dalej się dodają. np:

<error><errors src="files">Błąd programu : złe polecenie.</errors></error>
<error><errors src="files">Błąd programu : zły parametr</errors></error>

Czegoś tutaj nie rozumiem, jak to działa? Jak mam wyczyścić poprzedni wpis bez restartowania serwera?
Z góry dzięki za pomoc.

0

Jak zwykle prosty błąd, tym razem znaleziony przez AI - pierwszy raz:

Problem, który opisujesz, wynika z faktu, że Twój moduł doc przechowuje stan między wywołaniami funkcji show. Oznacza to, że każde wywołanie tej funkcji dodaje nowe elementy XML do dokumentu zamiast nadpisać poprzednie wpisy.

Aby rozwiązać ten problem, możesz utworzyć nowy obiekt doc w każdym wywołaniu funkcji show. Zamiast przechowywać stan dokumentu, będziesz tworzyć go od nowa za każdym razem, gdy wywołasz funkcję.

Poprawiony kod:

const builder = require('xmlbuilder')
const fs = require('fs')
const paths = require('./paths')
// Creating XML with errors
module.exports.show = function (JobID, IdOrder, serverError, src) {
    const doc = builder.create('error')
    console.log(JobID, IdOrder, serverError, src)
    if (serverError > 100) {
        switch (serverError) {
            case 101:
                serverError = "Błąd programu : zły parametr"

                break
            case 102:
                serverError = "Błąd programu : złe polecenie"
        }
    } else {
        serverError = "Nieznany błąd"
    }
    doc.ele('errors')
        .att('src', src)
        .txt(serverError)
        .end({ pretty: true })
});

    console.log(doc.toString())
    const xmlPath = paths.files(IdOrder, JobID, "reportXML")
    fs.writeFileSync(xmlPath, doc.toString())

Sorki za zamieszanie. Do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1