选择*query从数据库返回数据



我在数据库中设置了一个表,用户可以在其中选择要发送电子邮件的类别(从前端(。我的桌子是这样设置的:

name
category1
category2
category3

这些都是列。因此,在这些类别的每一列中都有电子邮件。我基本上想从用户选择的任何类别中获取数据。然而,我似乎无法获取这些数据。

这是我查询数据库的代码:

app.get('/sendBatchCategory', (req, res) => {
var category = req.query.category
category = category.toUpperCase();
var subject = req.query.subject;
var message = req.query.message;
var categoryQuery = ""
if (category == "CATEGORY1") {
categoryQuery = "SELECT CATEGORY1 FROM EMAILS"
} else if (category == "CATEGORY2") {
categoryQuery = "SELECT CATEGORY2 FROM EMAILS"
} else if (category == "CATEGORY3") {
categoryQuery = "SELECT CATEGORY3 FROM EMAILS"
} else if (category == "ALL") {
categoryQuery = "SELECT CATEGORY1, CATEGORY2, CATEGORY3 FROM EMAILS"
} else {
alert("category not found, please select a valid category")
}
//"SELECT '" + category + "' FROM EMAILS"
var sendBatchCategory = categoryQuery
ibmdb.open(ibmdbconnDash, function (err, conn) {
if (err) return console.log(err);
conn.query(sendBatchCategory, function (err, rows) {
if (err) {
console.log(err);
}
console.log(rows)
var listOfEmails = (rows) // here is where I am trying to store the data being called          into a variable to pass into the code to send an email.
conn.close(function () {
console.log("closing function sendBatchCategory");
});

发送电子邮件的代码(全部在同一功能内(

// async..await is not allowed in global scope, must use a wrapper
async function main() {
// Generate test SMTP service account from ethereal.email
// Only needed if you don't have a real mail account for testing
let testAccount = await nodemailer.createTestAccount();

// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: "x",
pass: "y",
},
});
// send mail with defined transport object
let info = await transporter.sendMail({
from: "x", // sender address
to: listOfEmails, // list of receivers
subject: subject, // Subject line
text: message //message line
});
sendBatchSuccess(req, res)
console.log("Message sent: %s", info.messageId);
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
// Preview only available when sending through an Ethereal account
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}
main().catch(console.error);

});
});
})

我从这些行得到的结果是

{ CATEGORY1: email1 }
{ CATEGORY1: email2 }
{ CATEGORY1: email3 }

但当它运行电子邮件代码时,我会得到错误:

Error: No recipients defined

您需要提取电子邮件列表

ibmdb.open(ibmdbconnDash, function (err, conn) {
if (err) return console.log(err);
conn.query(sendBatchCategory, function (err, rows) {
if (err) {
console.log(err);
}
console.log(rows);
var listOfEmails =[];
rows.foreach(function(entry){
if(entry.hasOwnProperty('CATEGORY1')){
listOfEmails.push(entry.CATEGORY1);
}
if(entry.hasOwnProperty('CATEGORY2')){
listOfEmails.push(entry.CATEGORY2);
}
if(entry.hasOwnProperty('CATEGORY3')){
listOfEmails.push(entry.CATEGORY3);
}
})
conn.close(function () {
console.log("closing function sendBatchCategory");
});

//使用已定义的传输对象发送邮件

let info = await transporter.sendMail({
from: "x", // sender address
to: listOfEmails.join(","), // list of receivers
subject: subject, // Subject line
text: message //message line
});

最新更新