J'ai un site node js sur le système local où l'utilisateur est informé des articles à la mode ou des messages par e-mail. Mon code fonctionne comme: -

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
    })
});

Le code ci-dessus est long, je vous montre une version plus courte. Tout fonctionne bien. Mon code est que lorsqu'un utilisateur affiche un article, il déclenche la méthode d'envoi d'e-mails et si cet article a plus de 5000 vues, alors son e-mail sera envoyé à tous les utilisateurs abonnés, mais l'utilisateur abonné peut être des milliers, alors comment envoyer un e-mail à tous les abonnés utilisateur sans retarder la visionneuse actuelle

Je veux informer l'utilisateur comme pinterest, medium avertit des millions d'utilisateurs par mail

Je veux dire que lorsqu'un utilisateur demande la page de l'article, un bloc de code vérifiera les vues et si les vues sont supérieures à quelque chose, un e-mail sera envoyé à plusieurs utilisateurs. Le nombre d'utilisateurs peut être important et si j'ai envoyé un e-mail au moment où l'utilisateur demande l'article, il peut y avoir un retard inhabituel pour cet utilisateur. Je veux que si les vues sont supérieures à quelque chose, alors il devrait publier n'importe quelle valeur booléenne dans un autre programme et ce programme devrait envoyer un e-mail à tous dans les coulisses sans déranger l'utilisateur ou cela peut être fait par toute autre astuce, veuillez le dire

0
Mr. Explorer explorer 4 nov. 2019 à 16:31

3 réponses

Rendez d'abord la vue, puis envoyez un e-mail.

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
Dijkstra 4 nov. 2019 à 13:51

Eh bien, le classique et le plus simple est d'ajouter une boucle. Soit pour la boucle soit pour la boucle while. Vous pourriez donc faire quelque chose comme ceci:

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

c'est le code pour envoyer des mails en même temps. Pour éviter le retard, ajoutez des retards. Si vous voulez le faire à l'exécution, faites une boucle while, cette condition est de détecter que la liste pour envoyer du courrier n'est pas nulle. en même temps, ajoutez l'adresse e-mail à la liste lorsque vous obtenez l'adresse e-mail. Ce n'est pas le meilleur moyen, bien sûr, mais cela résout le problème.

-2
windowsboy111 4 nov. 2019 à 13:45

J'ai eu la réponse. Je peux faire un autre programme différent de ce site Web qui fonctionnera en arrière-plan et il vérifiera les articles plus de 5000 vues qui ne sont pas envoyés et les enverra par courrier électronique aux utilisateurs abonnés. Mais j'ai une autre question qui peut nous exécuter un processus d'arrière-plan dans AWS?

0
Mr. Explorer explorer 4 nov. 2019 à 14:05