Reputation: 1182
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? What the query return is not the result. Anyone has the idea on it?
Upvotes: 0
Views: 354
Reputation: 40882
By using a node module that supports a Promise API for MySQL.
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");
}
}
);
}
}
Upvotes: 1