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

如何在node express js上动态更新mysql中的行,mysql,node.js,express,mariadb,Mysql,Node.js,Express,Mariadb,这是我查询以更新行的方式,其工作原理如下: const [rows, meta] = await db.query( ` UPDATE Portfolio SET title = ?, infoText = ?, devPeriod = ?, tags = ? WHERE id = ?

这是我查询以更新行的方式,其工作原理如下:

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;
导出它并在项目中的任何位置使用它