如何在节点express js上动态更新mysql中的行

Jav*_*nov 2 mysql mariadb node.js express

这就是我查询更新行的方式,它的工作原理是:

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

但有时根据用户的需要,我必须查询以仅更新特定列。例如,用户可能只想编辑 devPeriod 或标签和 infoText。我怎样才能做到这一点?

Ter*_*nox 7

我建议创建一个更新对象来指定要更新的字段和相关值。然后您可以从中创建查询和参数。

可以基于用户输入来填充更新对象。

例如:

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);
Run Code Online (Sandbox Code Playgroud)