Как отправить электронное письмо из приложения Webix, используя sendmail узла JS server на серверной части

Я хочу отправить электронное письмо из приложения webix, нажав кнопку в пользовательском интерфейсе, которая отправит запрос на публикацию посредством вызова ajax на сервер узла JS на серверной части. Часть webix выглядит следующим образом:

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

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

Функция обратного вызова:

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

Вышеуказанный ajax-вызов отправляет запрос узлу JS, где я использую пакет sendmail npm для достижения этой цели. Код выглядит следующим образом:

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

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

    function sendEmail() {
      sendmail({
        from: 'xyz@support.com',
        to: 'abc@support.com',
        subject: 'test sendmail',
        html: 'Mail of test sendmail ',
      }, function(err, reply) {
        console.log(err && err.stack);
        console.dir(reply);
    });

    }

Тем не менее, я получаю ниже ошибки:

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

Есть ли способ отправить электронное письмо из самого webix, не отправляя запрос на сервер узла JS? Или как использовать пакет sendmail npm для достижения этой цели, как я пытаюсь?

Любая помощь будет оценена.

1 ответ

Решение

Ваша проблема не в том, как вы используете sendmail, а в том, как вы используете экспресс-маршруты.

Вот пример кода, который я только что написал, который дал мне ту же ошибку, что и в вашем коде.

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

Проблема в том, что app.getи то же самое будет верно для app.post, имеет определенную подпись, что требуется. Функция, которая передается, должна иметь req а также res аргументы. Вы также можете по желанию добавить next аргумент последний.

Вот как мой код будет исправлен.

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

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

function doSomething() {
    console.log('this is a sample test');
}
Другие вопросы по тегам