Отправка писем нескольким подписанным клиентам в узле JS - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть узел js site в локальной системе, где пользователь уведомляется о последних статьях или публикуется по электронной почте. Мой код работает так: -

app.get('/:articlename', (req, res)=>{
conn.query(`SELECT views,isAlreadySent FROM article_table WHERE article_name='${req.params.articlename}'`, (err, results, fields)=>{
// if views greater then 5000 views and isAlreadySent is false then send email to subscribed user from database
    })
});

Приведенный выше код длинный, я показываю вам, ребята, более короткую версию. Все отлично работаетМой код состоит в том, что когда любой пользователь просматривает какую-либо статью, он запускает метод отправки электронной почты, и если эта статья имеет просмотры более 5000, то это электронное письмо будет отправлено всем подписанным пользователям, но подписанного пользователя может быть тысячи, так как я могу отправить электронную почту всем подписавшимсяпользователь, не отставая от текущего средства просмотра

Я хочу, чтобы пользователь уведомлялся как pinterest, среда уведомляет миллионы пользователей по почте

Я имею в виду, когда любой пользователь запрашивает страницу статьи, блок кода будет проверять представленияи если количество просмотров больше, чем-то, то электронное письмо будет отправлено нескольким пользователям. Количество пользователей может быть большим, и если я отправлю электронное письмо в тот момент, когда пользователь запросит статью, это может быть необычной задержкой для этого пользователя. Я хочу, чтобы, если число просмотров было больше, чем что-то, тогда оно должно публиковать любое значение bool в другой программе, и эта программа должна отправлять все закулисные письма, не мешая пользователю, или это может быть сделано любым другим трюком, пожалуйста, сообщите

Ответы [ 3 ]

0 голосов
/ 04 ноября 2019

Сначала просмотрите представление, а затем отправьте электронное письмо.

app.get('/:articlename', (req, res)=>{
  // DO YOUR STUFF
  // Render the article
  res.render('view');

  // Now process email stuff
  conn.query(`SELECT views,isAlreadySent FROM article_table WHERE article_name='${req.params.articlename}'`, (err, results, fields)=>{
    // if views greater then 5000 views and isAlreadySent is false then send email to subscribed user from database
    // SEND EMAIL HERE.
  });
});
0 голосов
/ 04 ноября 2019

Я получил ответ. Я могу сделать другую программу отличной от этого веб-сайта, которая будет работать в фоновом режиме, и она проверит статьи более чем на 5000 просмотров, которые не отправлены по электронной почте, и отправит их по электронной почте подписавшимся пользователям. Но у меня есть еще один вопрос: можем ли мы запустить фоновый процесс в AWS?

0 голосов
/ 04 ноября 2019

Ну, классическим и самым простым является добавить цикл. Либо для цикла, либо для цикла. Так что вы можете сделать что-то вроде этого:

for (let i=0;i<viewers.length;i++) { //assume that viewers is a list / array
    //sendmail()
}

это код для одновременной отправки почты. Чтобы избежать отставания, добавьте задержки. Если вы хотите сделать это во время выполнения, сделайте цикл while, чтобы убедиться, что список для отправки почты не равен нулю. в то же время, добавьте адрес электронной почты в список, когда вы получите адрес электронной почты. Конечно, это не лучший способ, но он решает проблему.

...