Mais tu comprends le concept de route et de contrôleur, Awoken ? Tu comprends ce que tu fais ou tu fais au hasard ?
Tu as une application Express. C’est comme une cuisine. T’as une route /contact. C’est un tiroir dans ta cuisine.
Maintenant tu veux installer un frigo dans ta cuisine. Est-ce que tu l’installes dans la cuisine, ou est-ce que tu t’arranges pour qu’un frigo s’installe chaque fois que tu ouvres le tiroir ? Puis quand tu as ouvert 3x ton tiroir tu appelles Ikea pour te plaindre qu’il y a une génération spontanée de frigos dans ta cuisine, qui n’est plus fonctionnelle du fait qu’elle est très encombrée par tant de satanés frigos ?
Mais tu comprends le concept de route et de contrôleur, Awoken ? Tu comprends ce que tu fais ou tu fais au hasard ?
Tu as une application Express. C’est comme une cuisine. T’as une route /contact. C’est un tiroir dans ta cuisine.
Maintenant tu veux installer un frigo dans ta cuisine. Est-ce que tu l’installes dans la cuisine, ou est-ce que tu t’arranges pour qu’un frigo s’installe chaque fois que tu ouvres le tiroir ? Puis quand tu as ouvert 3x ton tiroir tu appelles Ikea pour te plaindre qu’il y a une génération spontanée de frigos dans ta cuisine, qui n’est plus fonctionnelle du fait qu’elle est très encombrée par tant de satanés frigos ?
Ta ligne app.post('/contact', function(req, res, next){...} dit, si je ne me trompe pas, "execute ’…’ à chaque fois que le client fait un POST à l’adresse /contact. Du coup à chaque fois que tu envois ton formulaire, cette fonction est exécuté et donc à chaque fois tu fais le extend.
Ta ligne app.post('/contact', function(req, res, next){...} dit, si je ne me trompe pas, "execute ’…’ à chaque fois que le client fait un POST à l’adresse /contact. Du coup à chaque fois que tu envois ton formulaire, cette fonction est exécuté et donc à chaque fois tu fais le extend.
Si, c’est tout à fait le but, car c’est ce qui permet de générer ta page.
Mais ici, tu cherches à paramétrer une bibliothèque. Comme tu n’as pas besoin de le faire plusieurs fois, tu n’as pas besoin de le mettre dans une route, car ça alourdit le traitement inutilement (d’ailleurs, ici il refuse tout simplement de refaire la configuration)
Si, c’est tout à fait le but, car c’est ce qui permet de générer ta page.
Mais ici, tu cherches à paramétrer une bibliothèque. Comme tu n’as pas besoin de le faire plusieurs fois, tu n’as pas besoin de le mettre dans une route, car ça alourdit le traitement inutilement (d’ailleurs, ici il refuse tout simplement de refaire la configuration)
Là, tu génères une page (qui en l’occurrence contient simplement test). Tu as donc besoin de définir une route.
Si tu as déjà fait du PHP et du MVC, tu peux voir le code à l’intérieur de la route comme le contrôleur de ta page et le code en dehors de la route comme ce qui est fait par le serveur Web (Apache, Nginx… peu importe lequel) pour mettre à disposition les services qui lui sont propres.
La limite de mon exemple étant qu’ici, tu ne fais pas seulement un serveur Web
est exécuté à chaque fois que l’utilisateur envoi des données avec le formulaire ?
Ensuite, tu es d’accord que, ta ligne 22 :
1
2
3
mailer.extend(app,{// ...});
est une fonction de configuration du module d’envoi le mail puisque tu lui donne les infos sur le serveur ?
Le soucis est qu’une configuration doit être faite une seule fois ! Là cela revient à dire "à chaque fois que quelqu’un appel la page, reconfigure le module de mail. Mais tu l’a probablement déjà fait !
Si je me souviens bien, Awoken, avant tu as fais du PHP, non ? Si oui je commence à comprendre ton problème :
En Php, dès qu’on appel une page, l’application est démarrée, exécutée et tué à la fin. Dans un tel cas, oui tu dois tout reconfigurer à chaque fois.
Avec node/express ce n’est pas le cas ! Quand ton programme est exécuté il reste en mémoire ! Il n’est jamais relancé. L’application est en mémoire et les callback sont exécutés quand les routes sont atteintes.
est exécuté à chaque fois que l’utilisateur envoi des données avec le formulaire ?
Ensuite, tu es d’accord que, ta ligne 22 :
1
2
3
mailer.extend(app,{// ...});
est une fonction de configuration du module d’envoi le mail puisque tu lui donne les infos sur le serveur ?
Le soucis est qu’une configuration doit être faite une seule fois ! Là cela revient à dire "à chaque fois que quelqu’un appel la page, reconfigure le module de mail. Mais tu l’a probablement déjà fait !
Si je me souviens bien, Awoken, avant tu as fais du PHP, non ? Si oui je commence à comprendre ton problème :
En Php, dès qu’on appel une page, l’application est démarrée, exécutée et tué à la fin. Dans un tel cas, oui tu dois tout reconfigurer à chaque fois.
Avec node/express ce n’est pas le cas ! Quand ton programme est exécuté il reste en mémoire ! Il n’est jamais relancé. L’application est en mémoire et les callback sont exécutés quand les routes sont atteintes.
Je commence à mieux comprendre.
Et le PHP, j’en ai fait vite fait (les bases.
EDIT : Si j’ai bien compris, le mailer.extend est de trop, mais ses paramètres je dois les mettre où ?
Je crois pas que je suis obligé de les mettre vu que je suis pas chez free
EDIT : Si j’ai bien compris, le mailer.extend est de trop, mais ses paramètres je dois les mettre où ?
Je crois pas que je suis obligé de les mettres vu que je suis pas chez free
EDIT : Si j’ai bien compris, le mailer.extend est de trop, mais ses paramètres je dois les mettre où ?
Je crois pas que je suis obligé de les mettres vu que je suis pas chez free
C’est obligatoire de les mettres ? Je suis pas chez free
Que tu sois chez free ou non ne change rien. Tu dois déplacer le extend en dehors de la route : juste au dessus par exemple. Et pour le contenu, utilise le smtp de gmail directement.
C’est obligatoire de les mettres ? Je suis pas chez free
Que tu sois chez free ou non ne change rien. Tu dois déplacer le extend en dehors de la route : juste au dessus par exemple. Et pour le contenu, utilise le smtp de gmail directement.
constexpress=require('express'),swig=require('swig'),mailer=require('express-mailer'),path=require('path'),app=express();mailer.extend(app,{secureConnection:false,transportMethod:'SMTP',auth:{user:'monemail@gmail.com',pass:'monmdp'}});app.use(express.logger());app.use(express.bodyParser());app.use(express.static(path.join(__dirname,'public')));app.engine('html',swig.renderFile);app.set('views',__dirname+'/views');app.set('view engine','html');app.get('/',function(req,res){res.render('index');});app.post('/contact',function(req,res,next){res.send('test');});app.mailer.send('email',{to:'ton@email.com',from:req.body.email,subject:req.body.subject,message:req.body.message},function(err){if(err){console.log('On a une erreur!');return;}res.send('Email envoyé');});app.listen(3000);console.log('App is running');
Question : Si je met le smtp de gmail, seuls les comptes gmails pourront se connecter ?
EDIT : Si j’ai bien compris, le mailer.extend est de trop, mais ses paramètres je dois les mettre où ?
Je crois pas que je suis obligé de les mettres vu que je suis pas chez free
C’est pas obligatoire de mettre les mêmes paramètres que celui de ta vidéo (vu que tu n’as fais qu’un copier-coller). Mais si je me base sur la vidéo et le code que tu as fourni, c’est bien au bon endroit vu que la clé from de ton mailer (ligne 23 de ton code) correspond à l’email saisi depuis le formulaire. Ensuite le code de ta ligne 32 à la ligne 35 ne sont pas au bon endroit, elles doivent être dans le mailer.extend
Mais maintenant, si tu dois faire sortir cette configuration de ton controlleur tu ne dois pas te baser sur l’email saisi par l’utilisateur en question, mais sur des paramètres que tu maitrise déjà. Il y a un exemple valide sur la page du package concernant la configuration pour gmail.
A partir de là, tu auras moins de problème pour la suite de ton code.
Edit: Oops, tu as déjà modifié ta configuration donc mon post est quelque peu inutile.
Question : Si je met le smtp de gmail, seuls les comptes gmails pourront se connecter ?
Non, pas du tout. Le fait est que c’est de ton compte que seront envoyé les mails vers le second email (qui peut-être le même que le premier).
Edit 2: Mais quand je regarde mieux ton code, ton mail ne sera jamais envoyé que ce soit avec les bons ou mauvais paramètres. L’envoi du mail doit se faire depuis l’interieur de la fonction app.post("/contact", ...)
app.mailer.send('email',{to:'awoken(cfaux)@email.com',from:req.body.email,subject:req.body.subject,message:req.body.message},function(err){if(err){console.log('On a une erreur!');return;}res.send('Email envoyé');});
app.mailer.send('email',{to:'awoken(cfaux)@email.com',from:req.body.email,subject:req.body.subject,message:req.body.message},function(err){if(err){console.log('On a une erreur!');return;}res.send('Email envoyé');});
C:\Users\didi\Desktop\contact>node app.js
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
App is running
TypeError: Cannot create property 'reconnectCount' on boolean 'false'
at SMTPClient._actionAUTHComplete (C:\Users\didi\Desktop\contact\node_modules\express-mailer\node_modules\nodemaile
r\node_modules\simplesmtp\lib\client.js:873:34)
at SMTPClient._onData (C:\Users\didi\Desktop\contact\node_modules\express-mailer\node_modules\nodemailer\node_modul
es\simplesmtp\lib\client.js:343:29)
at emitOne (events.js:115:13)
at TLSSocket.emit (events.js:210:7)
at addChunk (_stream_readable.js:252:12)
at readableAddChunk (_stream_readable.js:239:11)
at TLSSocket.Readable.push (_stream_readable.js:197:10)
at TLSWrap.onread (net.js:589:20)
A en juger, le problème viendrait de connect, je me demande bien pourquoi tu en as besoin. Et je suis d’autant plus surpris que tu n’es pas eu ce problème avant avec logger et body-parser. Car depuis express et ces middlewares sont des packages séparés, à moins que je ne dise des bêtises.
A en juger, le problème viendrait de connect, je me demande bien pourquoi tu en as besoin. Et je suis d’autant plus surpris que tu n’es pas eu ce problème avant avec logger et body-parser. Car depuis express et ces middlewares sont des packages séparés, à moins que je ne dise des bêtises.
constexpress=require('express'),swig=require('swig'),mailer=require('express-mailer'),path=require('path'),app=express();mailer.extend(app,{secureConnection:false,transportMethod:'SMTP',auth:{user:'monemail@gmail.com',pass:'monmdp'}});app.use(express.logger());app.use(express.bodyParser());app.use(express.static(path.join(__dirname,'public')));app.engine('html',swig.renderFile);app.set('views',__dirname+'/views');app.set('view engine','html');app.get('/',function(req,res){res.render('index');});app.post('/contact',function(req,res,next){app.mailer.send('email',{to:'awoken(cfaux)@email.com',from:req.body.email,subject:req.body.subject,message:req.body.message},function(err){if(err){console.log('On a une erreur!');return;}res.send('Email envoyé');});});app.listen(3000);console.log('App is running');
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte