Dynamic port & Bower + Grunt scripts with Heroku host

I use Heroku to host some project like Osprey, and I need to admit that this is really a nice platform to host your personal projects for free. It’s really easy to start with but you need to know a few of things…

First of all, check the Node tutorial provided by Heroku.

Bower & Grunt

If you have some bower or grunt scripts to launch after the npm install and before the npm start, you need to add a bash script reference in your package.json file. Your package.json file will contain a postinstall command:

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "start": "node server.js",
  "postinstall": "bash ./build.sh"
},

And your build.sh file should contain all the commands to build the rest of your project (copy, move files, etc…)

#!/bin/bash
./node_modules/bower/bin/bower install
./node_modules/grunt-cli/bin/grunt

Dynamic port

Heroku assigns dynamically a port to your app. So, if you have set a fixed port in your server.js file, it will not work with the heroku deployment. The port is added to the process.env.PORT variable so you need to pull it from there. You app.listen method should look something like this:

var port = process.env.PORT;
app.listen(port || 3000);

Envoyer des mails en javascript avec nodemailer

Pour un projet perso qui tourne sur un stack MEAN (Mongo, Express, Angular et NodeJS), j’ai eu besoin de notifier des utilisateurs en leur envoyant un mail.

J’ai donc trouvé plusieurs librairies qui font le boulot, mais j’ai beaucoup accroché avec nodemailer qui pour moi est la plus propre et simple d’utilisation. Et d’ailleurs, avec plus de 5000 stars et 70 contributeurs sur Github ça va, c’est assez stable 🙂

Installation

Ajout de nodemailer au projet (le —save pour ajouter a dépendance au package.json)

npm install nodemailer —save 

Autorisation Gmail

Pour Gmail, et surement les autres aussi, il faut configurer son compte en « Bas niveau de sécurité » pour autoriser une application externe  à lire/envoyer des emails.

(pour ceux qui ne souhaitent pas baisser le niveau de sécurité, il existe d’autres alternatives)

Baisser le niveau de sécurité : https://www.google.com/settings/security/lesssecureapps

Envoyer un email

Au début du fichier, au moment des import, on ajoute une dépendance à nodemailer :

var nodemailer = require('nodemailer');

On crée ensuite la variable « transporter » qui contient les options de connexion et de transport pour l’envoi des emails (qu’on réutilisera à chaque envoi de mail)

var transporter = nodemailer.createTransport('smtps://user%40gmail.com:password@smtp.gmail.com');

Ensuite on construit l’objet JSON « mailOptions » qui contient les différents champs du mail (les symboles unicodes sont supportés!).

var mailOptions = {
  from: ‘Joey Bronner" <mon@email.com>',
  to: ‘yourfriend@email.com, yourotherfriend@email.com’,
  subject: ‘Bonjour',
  text: 'Hello world',
  html: '<b>Hello world</b>'
};

Quatre paramètres sont obligatoires et d’autres sont facultatifs:

  • from
  • to
  • subject
  • text / html

Dernière étape, l’envoi du mail!

transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    console.log(error);
  }
  console.log(‘Message sent: ' + info.response);
});

Pleins d’options (pièces jointes, templates etc…) sont disponibles, donc si vous avez besoin d’envoyer des mails en JS, pensez à nodemailer!

Plus d’informations sur le repository Github : https://github.com/nodemailer/nodemailer

Debugger Node.js avec node-inspector (Chrome Dev Tools)

La première solution pour débugger la partie serveur en Node est de créer des traces via des console.log, console.info, console.error etc… mais ce n’est pas le but de cet article puisqu’il existe une autre manière beaucoup plus efficace de debugger ce code là grace au plugin node-inspector (Chrome Dev Tools).

Au cas où, je mets quand même les différentes options pour ceux qui souhaitent débugger dans la console :

  • console.log([data], […]);
  • console.info([data], […]);
  • console.error([data], […]);
  • console.warn([data], […]);
  • console.dir(obj);
  • console.time(label);
  • console.timeEnd(label);
  • console.trace(label);
  • console.assert(expression, [message]);

Utiliser son browser

Le gros avantage de debugger dans le Chrome Dev Tools c’est de faire du pas à pas et de pouvoir examiner les variables, objets etc à la volée! Pour en profiter, il suffit d’installer le package node-inspector (à propos de package).

npm install -g node-inspector

Au moment du démarrage du serveur, il faudra simplement rajouter le flag –debug

node --debug server.js

Ou pour mettre un break sur le serveur dès son démarrage…

node --debug-brk server.js

Le serveur a été démarré en mode debug, dernière étape, il faut maintenant lancer node-inspector qui va démarrer sur un autre port : 8080

node-inspector &amp;

nodeinspector_command_line

Votre debugger est prêt à l’URL : http://127.0.0.1:8080/debug?port=5858

node_inspector_debugger_tool

Et voilà! Vous pouvez debugger côté serveur like a boss.