source

노드 express js의 mysql 행을 동적으로 업데이트하는 방법

factcode 2022. 9. 22. 00:09
반응형

노드 express js의 mysql 행을 동적으로 업데이트하는 방법

행을 업데이트하기 위해 쿼리하는 방법은 다음과 같습니다.

const [rows, meta] = await db.query(
        `
        UPDATE
            Portfolio
        SET
            title = ?,
            infoText = ?,
            devPeriod = ?,
            tags = ?
        WHERE
            id = ?
        `,
        [title, infoText, Number(devPeriod), tags, Number(portfolioId)]
    );
    return rows;

그러나 사용자가 원하는 것에 따라 특정 열만 업데이트하기 위해 쿼리해야 할 경우가 있습니다.예를 들어 사용자는 devPeriod 또는 태그와 infoText만 편집할 수 있습니다.어떻게 하면 될까요?

업데이트할 필드와 관련 값을 지정하는 업데이트 개체를 생성하는 것이 좋습니다.그런 다음 이를 통해 조회 및 매개 변수를 생성할 수 있습니다.

업데이트 개체는 사용자 입력에 따라 채울 수 있습니다.

예를 들어 다음과 같습니다.

async function updatePortfolio(db, portfolioId, update) {
    const query = "Update Portfolio SET " + Object.keys(update).map(key => `${key} = ?`).join(", ") + " WHERE id = ?";
    const parameters = [...Object.values(update), portfolioId];
    console.log("updatePortfolio: Running query:", query);
    const [rows, meta] = await db.query(query, parameters);
    return rows;
}

// Add or remove fields as you require.
update = { 
    title: "Some Title",
    infoText: "Infotext",
    devPeriod: 10,
    tags: "tags"
}

updatePortfolio(db, 1, update);

// Add or remove fields as you require.
update = { 
    title: "Some Title",
    tags: "tags"
}

updatePortfolio(db, 2, update);

동료에게 도움을 청한 후 동적 쿼리 작성을 쉽게 하기 위해 Knex.js를 소개해 주었습니다.그래서 그냥 했어요.그 이후로 동적 쿼리에 사용하고 있습니다.이런 종류의 작업에는 매우 적합합니다.설정도 간단합니다.

import knex from 'knex';

const queryBuilder = knex({ client: 'mysql' });

export default queryBuilder;

프로젝트 내 어디에나 내보내기 및 사용 가능

언급URL : https://stackoverflow.com/questions/63804322/how-to-dynamically-update-row-in-mysql-on-node-express-js

반응형