저는 Nodejs에 약간의 초보자입니다. 저는 Nodejs Express 솔루션으로 일하고 있습니다. 일부 정보가 MSSSQL 데이터베이스에 추가되면 전자 메일로 보내려고합니다. 이것은 나를 위해 잘 작동합니다. 문제는 5 분마다 데이터베이스에 추가 된이 정보가 수정되었는지 확인하고, 그렇지 않으면 다른 전자 메일을 보내려고합니다. DB를에 정보를 추가하는 호출이 경로입니다 : 전자 메일을 보내기위한Nodejs가 다른 스레드를 관리합니다
router.post('/postlinevalidation', function(req, res) {
//insert function into mssql
silkcartCtrl.sendMail(req, res);
});
컨트롤러 부분 :
exports.sendMail = function(req, res) {
var emails = "";
fs.readFile('./config/email.conf', 'utf8', function (err,data) {
if (err) {
return logger.error(err);
}
emails = data;
});
var minutes = 5, the_interval = minutes * 60 * 1000;
var refreshId = setInterval(function() {
logger.info("I am doing my 5 minutes check FL_PENDIENTE");
var request = new sql.Request(req.dbsqlserver);
var sqlpendinglinesvalidation = "SELECT [FK_IDCHECK],[FK_IDPEDIDO],[BK_IDPROVEEDOR],[DE_PROVEEDOR]"+
",[FK_FAMILIA],[BK_FAMILIA],[FK_SUBFAMILIA],[BK_SUBFAMILIA],[FK_ARTICULO]"+
",[BK_ARTICULO],[FL_VALIDAR],[DT_FECHA],[FL_PENDIENTE],[DES_CHECK],[QNT_PROPUESTA],[FECHA]"+
"FROM TABLE"+
" WHERE [FL_PENDIENTE] = 1";
request.query(sqlpendinglinesvalidation, function (err, recordset) {
if (recordset.length > 0) {
var transporter = nodemailer.createTransport('smtps://user%40gmail.com:[email protected]');
var mailOptions = {
from: '"Mailer" <[email protected]>', // sender address
to: emails, // list of receivers
subject: 'Tienes compras pendientes de validar', // Subject line
text: 'Tienes compras pendientes de validar', // plaintext body
html: '<b>Tienes compras pendientes de validar.</b>' // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info){
if(error){
return logger.error(error);
}
logger.info('Message sent: ' + info.response);
});
} else {
clearInterval(refreshId);
return true;
}
});
}, the_interval);
};
내가이 잘 작동되는 것을 특징으로한다. 나는 5 분을 제어한다 setInterval
그러나 나는 postlinevalidation
경로가 호출 될 때마다 supossed, 새로운 스레드가 열려 있기 때문에 몇개의 setInterval
프로세스가 실행 중이다. 관리 방법을 알고 싶습니다. 컨트롤러 기능 exports.sendMail
가 실행중인 경우, 경로를 다시 호출 할 때, "이 프로세스를 종료", 사전
process.exec 또는 process.fork에 의해 달성 될 수 있지만 문서를 검토하면 얻을 수 있습니다. Node.js는 수동 멀티 테 더딩을 위해 설계되지 않았습니다. Node.js에서 여러 스레드를 자주 사용해야하는 경우 기술 또는 아키텍처를 전환 할 때가 많습니다. –