Как отправить электронное письмо из приложения 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');
}