2017-04-23 1 views
1

Je souhaite envoyer un e-mail à partir d'une application webix en cliquant sur un bouton dans l'interface utilisateur, qui envoie une demande de post via un appel ajax le serveur JS nœud au backend. La partie webix ressemble ci-dessous:Comment envoyer un e-mail depuis une application Webix en utilisant sendmail du noeud serveur JS au backend

{ id:'tb', 
    view: 'toolbar', 
    cols: [ 

    {view:"button", id:"mail_btn", type:"icon", label:"SendEmail", tooltip:"Send an email", width:100, on: {onItemClick:function(){sendEmail()}} },  
     ] 
} 

La fonction de rappel:

function sendEmail() {   
    var bodypart = {"message" : "This is a test mail"};   
    $.ajax({ 
      type: 'POST', 
      url: '/appl/email', 
      data: bodypart, 
      success: function (data) { 
         console.log("success"); 
        }, 
       error: function(err){ 
        console.log(err); 
        } 
       }); 
    } 
} 

ci-dessus appel ajax envoie une requête au nœud JS où je me sers paquet sendmail NPM pour y parvenir. Le code ressemble ci-dessous:

var sendmail = require('sendmail')(); 

app.post('/appl/email', sendmail()); 

    function sendEmail() { 
     sendmail({ 
     from: '[email protected]', 
     to: '[email protected]', 
     subject: 'test sendmail', 
     html: 'Mail of test sendmail ', 
     }, function(err, reply) { 
     console.log(err && err.stack); 
     console.dir(reply); 
    }); 

    } 

Cependant, je reçois ci-dessous erreur:

Error: Route.post() requires callback functions but got a [object Undefined] 

Est-il possible d'envoyer des e-mail de webix lui-même sans envoyer la requête au nœud serveur JS? Ou bien comment utiliser le paquet npm de sendmail pour y parvenir comme je le fais?

Toute aide serait appréciée.

Répondre

1

Votre problème ne réside pas dans la façon dont vous utilisez sendmail, mais plutôt dans la manière dont vous utilisez les routes express.

Voici un exemple de code que j'ai juste fouetté qui m'a donné la même erreur que vous avez dans votre code.

const express = require('express'); 
const app = express(); 

app.get('/', doSomething()); 

function doSomething() { 
    console.log('this is a sample test'); 
} 

app.listen(3000,() => console.log('server is running')); 

Le problème est que app.get, et même serait vrai pour app.post, a une certaine signature, il a besoin. La fonction qui est passée est supposée avoir les arguments req et res. Vous pouvez éventuellement ajouter l'argument next en dernier.

Voici comment le code ci-dessus serait corrigé.

const express = require('express'); 
const app = express(); 

app.get('/', (req, res) => { 
    doSomething(); 
    res.json('success'); 
}); 

function doSomething() { 
    console.log('this is a sample test'); 
} 
+0

Merci d'avoir signalé les erreurs. Je l'ai corrigé et ça marche maintenant. –