如何在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 中工作?