我一直试图避免在routes.js文件中产生开销。
在这里:
module.exports = function(app, db) {
app.get('/', function(req, res) {
res.render('index')
});
app.get('/contact-us', function(req, res) {
var col = db.collection('contacts');
var transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: 'gmail.user@gmail.com',
pass: 'userpass'
}
});
});
});
}
正如您所看到的,只是通过实例化mongo集合和邮件传输器,业务逻辑已经充斥着这种情况。我无法找到有关如何将此逻辑委托给外部模块的任何材料,例如sendmail.js,savetomongo.js等。
有什么建议吗?
答案 0 :(得分:1)
我做了一些修改。我已根据您的要求更新了。 你需要根据实际需要来制作它。
var sendmail = require('./sendmail.js');
var savetomongo = require('./savetomongo.js');
module.exports = function(app, db) {
app.get('/', function(req, res) {
res.render('index')
});
app.get('/contact-us', function(req, res) {
var col = db.collection('contacts');
var document = {'id': 'xyz'};
savetomongo.save(col, document, function(error, is_save) {
if (error) {
//handle error
} else {
// next()
sendmail.sendEmail('DUMMY <from@xyz.com>', 'to@xyz.com', 'TestEmail', 'Only for testing purpose', function(error, isSend) {
if (error) {
//handle error
} else {
// next()
//res.render('index')
}
});
}
});
});
}
// sendmail.js
module.exports = {
sendEmail: function(fromEmailFormatted, toEmail, subject, message, fn) {
var mailOptions = {
from: fromEmailFormatted, // sender address
to: toEmail, // list of receivers
subject: subject, // Subject line
html: message // html body
};
var transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: 'gmail.user@gmail.com',
pass: 'userpass'
}
});
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
return fn(error);
} else {
return fn(null, true);
}
});
}
}
// savetomongo.js
module.exports = {
save: function(col, data, fn) {
col.insert(data, {w: 1}, function(err, records) {
if (err) {
return fn(err);
} else {
return fn(null, records);
}
});
}
}