Mam model, który wymaga wejścia daty w klauzuli gdzie na zapytanie.

const Model = sequelizeTwo.define('model', {
    A: Sequelize.BIGINT,
    B: Sequelize.DOUBLE,
    C: Sequelize.DOUBLE,
    D: Sequelize.DOUBLE,
    E: Sequelize.DOUBLE, 
    F: Sequelize.DOUBLE,
    DATE: Sequelize.DATEONLY,  
    newCol: Sequelize.VIRTUAL

},{
    tableName: "Model",
    timestamps: false,
    freezeTableName: true
})

DATE tutaj jest używany jako params dla zapytania, aby wyświetlić informacje o kliencie. Ale to jest koniec jego użycia. Nie chcę wysyłać DATE do klienta, ale nie widzę sposobu, aby go usunąć.

Jeśli usunąłem go z modelu, daje błąd strefowy, który jest również inny problem.

app.get('/api/:date', (req, res) => {
    var date = req.params.date

    Model.findAll({
        where: {
            DATE: {
                [Op.eq]: date
            }
        },
        order: [
            ['A', 'ASC']
        ]
    }).then(result => {

        ...

        for (i; i < result.length; i++) {

            ...
            delete result[i].DATE 
            console.log(result[i].DATE)
            result[i]["newCol"] = values;
        }
        res.json(result);
    })
})

Próbowałem korzystać z operatora usuwania wewnątrz i na zewnątrz pętli, ale nie ma użycia. Nadal zachowuje nieruchomość i wysyła go z powrotem do klienta

            delete result[i].DATE //Inside loop
            delete result.DATE //before loop

Wartościami są zaktualizowane po zakończeniu zadania, ale właściwość / klucz nie może zostać zmodyfikowany.

           result[i].DATE = null or undefined

Chcę tu osiągnąć, jest to, że chcę wysłać obiektów z powrotem, który ma wszystkie właściwości w modelu sequeleze z wyjątkiem DATE

2
Siddhut 20 luty 2019, 10:26

2 odpowiedzi

Najlepsza odpowiedź

Myślę, że powinieneś użyć funkcji excludes dla tego przypadku:

Model.findAll({
    where: {
        DATE: {
            [Op.eq]: date
        }
    },
    order: [
        ['A', 'ASC']
    ],
    attributes: { exclude: ['DATE'] }
})

Więcej informacji tutaj: Sequelelizuj dokumentację

2
Oliver Nybo 20 luty 2019, 07:42

Myślę, że najlepszą praktyką jest stworzenie innego modelu widoku jako obiektu transferu danych (DTO) i do mapowania tylko pożądanych właściwości (bez {x0}}).

Dalsze czytaj: DTO.

Przykład pseudokodów:

Model.findAll({
    //...
}).then(result => {

    ...
    let resultDTO = mapToDTO(result);

    res.json(resultDTO);
})
0
Shahar Shokrani 20 luty 2019, 07:51