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

Posted

技术标签:

【中文标题】如何在node express js上动态更新mysql中的行【英文标题】:how to dynamically update row in mysql on node express js 【发布时间】:2020-12-27 10:54:10 【问题描述】:

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

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。 我如何做到这一点?

【问题讨论】:

【参考方案1】:

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

可以根据用户输入填充更新对象。

例如:

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);

【讨论】:

【参考方案2】:

在向我的同事寻求帮助后,他们向我介绍了 Knex.js,以便更轻松地构建动态查询。所以我就跟着去了。 从那以后一直使用它进行动态查询。非常适合这种类型的任务。配置也很简单:

import knex from 'knex';

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

export default queryBuilder;

导出并在项目中的任何位置使用它

【讨论】:

以上是关于如何在node express js上动态更新mysql中的行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongodb、node.js、express 和 EJS 创建动态站点地图?

我可以在 Node.js/Express 中动态导入 TypeScript 模块吗?

使用 Visual Studio 2012 express 进行 TypeScript、node.js 开发

会话如何在 Express.js 和 Node.js 中工作?

如何使用 node.js 在 express.js 上使用 twitter api 显示最后 20 条推文?

如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?