[英]Avoid nested SQL query in node.js
mysql.query(`SELECT templateCode from templates WHERE templateCode = "${templateCode}"`, (err, result) => {
if (result.length !== 0) {
req.session.success = false;
req.session.message = "Template Code must be unique!";
return res.redirect("/giftCard/templates");
}
mysql.query(
`INSERT INTO outertemplateimages (outerImagePath, outerImageUrl) VALUES("${outerImageFilePath}", "${process.env.URL}${outerImageFilePath}")`,
async (err, { insertId: outerImageId }) => {
mysql.query(
`INSERT INTO innertemplateimages (innerImagePath, innerImageUrl) VALUES("${innerImageFilePath}", "${process.env.URL}${innerImageFilePath}")`,
async (err, { insertId: innerImageId }) => {
mysql.query(
`INSERT INTO templates (templateName, templateCode, outerImage, innerImage) VALUES("${templateName}", "${templateCode}", ${outerImageId}, ${innerImageId})`,
(err, result) => {
if (!err) {
req.session.success = true;
req.session.message = "New Template is added successfully";
res.redirect("/giftCard/templates");
}
}
);
}
);
}
);
});
As the title mentioned, is there any way to write non-nested SQL query in node.js?正如标题所提到的,有没有办法在node.js 中编写非嵌套SQL 查询? What the query return is not the result.
查询返回的不是结果。 Anyone has the idea on it?
任何人都有这个想法?
By using a node module that supports a Promise API for MySQL.通过使用支持 MySQL 的 Promise API 的节点模块。
Or by not nesting the callbacks, and using named functions instead:或者不嵌套回调,而是使用命名函数:
function(req, res, next) {
mysql.query(`SELECT templateCode from templates WHERE templateCode = "${templateCode}"`, processTemplateCodes);
function processTemplateCodes(err, result) {
if (result.length !== 0) {
req.session.success = false;
req.session.message = "Template Code must be unique!";
return res.redirect("/giftCard/templates");
}
mysql.query(
`INSERT INTO outertemplateimages (outerImagePath, outerImageUrl) VALUES("${outerImageFilePath}", "${process.env.URL}${outerImageFilePath}")`,
outerTemplateImageInserted);
}
function outerTemplateImageInserted(err, {
insertId: outerImageId
}) {
mysql.query(
`INSERT INTO innertemplateimages (innerImagePath, innerImageUrl) VALUES("${innerImageFilePath}", "${process.env.URL}${innerImageFilePath}")`,
innerTemplateImageInserted);
}
function innerTemplateImageInserted(err, {
insertId: innerImageId
}) {
mysql.query(
`INSERT INTO templates (templateName, templateCode, outerImage, innerImage) VALUES("${templateName}", "${templateCode}", ${outerImageId}, ${innerImageId})`,
(err, result) => {
if (!err) {
req.session.success = true;
req.session.message = "New Template is added successfully";
res.redirect("/giftCard/templates");
}
}
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.