Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 January 26

Dd

Dmitry darkdim in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Будет анонс со ссылкой
билеты почем?
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Dmitry darkdim
билеты почем?
источник

Dd

Dmitry darkdim in NodeUA - JavaScript and Node.js in Ukraine
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
источник

YK

Yurii Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
источник

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
Разумеется, это ведь ссылочный тип
источник

RB

Roman B. in NodeUA - JavaScript and Node.js in Ukraine
Здраствуйте, использую nodemailer для отправки форми с сайта на пошту gmail. На локальном хостинге все работает, как только заливаю код на хостинг сообщения не приходят. Опцию в настройках аккаунта пошти google less secure apps включил на Enable, и все равно не работает.

Сам код:
  let transporter = nodemailer.createTransport({
   host: 'smtp.gmail.com',
   service: "gmail",
   port: 465,
   secure: true, // true for 465, false for other ports
   auth: {
     user: 'user@gmail.com', // generated ethereal user
     pass: 'userpassword' // generated ethereal password
   },
   tls:{
     rejectUnauthorized: false
   }
 });

 let mailOption = {
   from: 'vikobanzayinfo@gmail.com',
   to: "vikobanzayinfo@gmail.com," + data.email,
   subject: "Віко Банзай",
   text: 'Нове замовлення',
   html: res //HTML замовлення товару
 };

let info = await transporter.sendMail(mailOption, (error, info) => {
   if (error) {
     return console.log("Error sending message: ", error );
   }
   console.log("Message Was Sent Succesfuly: %s", info.messageId);
   return true;
 });

Что я делаю не так?
источник

K

Kolya in NodeUA - JavaScript and Node.js in Ukraine
було б корисно побачити "error" який повертається в callback, зазвичай gmail дає досить інформативні помилки
источник

IG

Iurii Golskyi in NodeUA - JavaScript and Node.js in Ukraine
Roman B.
Здраствуйте, использую nodemailer для отправки форми с сайта на пошту gmail. На локальном хостинге все работает, как только заливаю код на хостинг сообщения не приходят. Опцию в настройках аккаунта пошти google less secure apps включил на Enable, и все равно не работает.

Сам код:
  let transporter = nodemailer.createTransport({
   host: 'smtp.gmail.com',
   service: "gmail",
   port: 465,
   secure: true, // true for 465, false for other ports
   auth: {
     user: 'user@gmail.com', // generated ethereal user
     pass: 'userpassword' // generated ethereal password
   },
   tls:{
     rejectUnauthorized: false
   }
 });

 let mailOption = {
   from: 'vikobanzayinfo@gmail.com',
   to: "vikobanzayinfo@gmail.com," + data.email,
   subject: "Віко Банзай",
   text: 'Нове замовлення',
   html: res //HTML замовлення товару
 };

let info = await transporter.sendMail(mailOption, (error, info) => {
   if (error) {
     return console.log("Error sending message: ", error );
   }
   console.log("Message Was Sent Succesfuly: %s", info.messageId);
   return true;
 });

Что я делаю не так?
може тому що ви використовуєте синтаксис await transporter.sendMail(mailOption, callback) разом з колбеком, а не як проміси?
Спробуйте
try {
   const info = await transporter.sendMail(mailOption)
   ...
} catch (e) {
   console.error(e)
}
источник

K

Kolya in NodeUA - JavaScript and Node.js in Ukraine
Iurii Golskyi
може тому що ви використовуєте синтаксис await transporter.sendMail(mailOption, callback) разом з колбеком, а не як проміси?
Спробуйте
try {
   const info = await transporter.sendMail(mailOption)
   ...
} catch (e) {
   console.error(e)
}
швидше за все не в цьому справа, тому що автор вказав що "На локальном хостинге все работает", але зауваження слушне

причина може бути в "репутації" самого хостингу
"Finally, you might hit the deliverability issues as you will be sending messages from publicly-available servers. There’s a fair number of spammers and fraudsters utilizing Gmail and even Google Apps accounts and this all affects the reputation of the sending domains."
источник

IG

Iurii Golskyi in NodeUA - JavaScript and Node.js in Ukraine
Kolya
швидше за все не в цьому справа, тому що автор вказав що "На локальном хостинге все работает", але зауваження слушне

причина може бути в "репутації" самого хостингу
"Finally, you might hit the deliverability issues as you will be sending messages from publicly-available servers. There’s a fair number of spammers and fraudsters utilizing Gmail and even Google Apps accounts and this all affects the reputation of the sending domains."
+
источник

F

Fuckboy in NodeUA - JavaScript and Node.js in Ukraine
Как я могу создать чат комнату, чтобы сообщение получали только те клиенты которые находятся в ней? С клиента  по вебсокету приходит название комнаты и я пытаюсь его сделать ключем в Map, а значением Set из конекшенов, но это не совсем то что нужно. Помогите, плз

Код:

'use strict';

const WebSocket = require('ws');
const http = require('http');

const server = http.createServer().listen(8000);
const ws = new WebSocket.Server({ server });

const rooms = new Map();
const connections = new Set();

ws.on('connection', connection => {
 connections.add(connection);
 connection.on('message', message => {
   const msgData = JSON.parse(message)
   if (msgData.type === 'join') {
     const { roomName } = msgData;
     rooms.set(roomName, connections);
   };
   console.log(rooms);
   for (const client of ws.clients) {
     if (client.readyState !== WebSocket.OPEN) continue;
     if (client === connection) continue;
     client.send(message);
   };
 });
});
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Fuckboy
Как я могу создать чат комнату, чтобы сообщение получали только те клиенты которые находятся в ней? С клиента  по вебсокету приходит название комнаты и я пытаюсь его сделать ключем в Map, а значением Set из конекшенов, но это не совсем то что нужно. Помогите, плз

Код:

'use strict';

const WebSocket = require('ws');
const http = require('http');

const server = http.createServer().listen(8000);
const ws = new WebSocket.Server({ server });

const rooms = new Map();
const connections = new Set();

ws.on('connection', connection => {
 connections.add(connection);
 connection.on('message', message => {
   const msgData = JSON.parse(message)
   if (msgData.type === 'join') {
     const { roomName } = msgData;
     rooms.set(roomName, connections);
   };
   console.log(rooms);
   for (const client of ws.clients) {
     if (client.readyState !== WebSocket.OPEN) continue;
     if (client === connection) continue;
     client.send(message);
   };
 });
});
Не совсем по теме вопроса, но первое правило работы с вебсокетами - использовать WeakMap-ы.
источник

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Не совсем по теме вопроса, но первое правило работы с вебсокетами - использовать WeakMap-ы.
есть линк почему?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Alex
есть линк почему?
Линка нет, есть потраченные часы переписывания чужого кода, дабы избавить бедный апликейшн от мемориликов.
Ежели хорошие программисты и не очень забывают обрабатывать все ошибки и события закрытия сокетов, то WeakMap делает это за них как только конекшн умирает.
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Например взять пару невинных строк типа
connections.add(connection);
rooms.set(roomName, connections);

Вот вам и готовый мемори лик. Чтобы потом это все почистить надо будет при дисконнекте пройтись по всем комнатам, где этот несчастный юзер побывал, повычищайть их, плюс не забыть это почистить из всего списка конекшенов. Короч геморняка хватит.

Ну и отвечая на основной вопрос "чтобы сообщение получали только те клиенты которые находятся в ней" надо в комнату и добавлять только тех, кто туда зашел, а не все  rooms.set(roomName, connections);
источник

F

Fuckboy in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Например взять пару невинных строк типа
connections.add(connection);
rooms.set(roomName, connections);

Вот вам и готовый мемори лик. Чтобы потом это все почистить надо будет при дисконнекте пройтись по всем комнатам, где этот несчастный юзер побывал, повычищайть их, плюс не забыть это почистить из всего списка конекшенов. Короч геморняка хватит.

Ну и отвечая на основной вопрос "чтобы сообщение получали только те клиенты которые находятся в ней" надо в комнату и добавлять только тех, кто туда зашел, а не все  rooms.set(roomName, connections);
я это понимаю, в этом и есть проблема
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Fuckboy
я это понимаю, в этом и есть проблема
Проблема в том чтобы вместо сета со всеми коннекшенами добавлять новый сет с одним или в случае если комната есть, то доставать уже "комнатный" сет и добавлять юзера туда?
источник

F

Fuckboy in NodeUA - JavaScript and Node.js in Ukraine
мне тогда нужно как-то пушить в Map где ключ roomName конекшены
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Так а в чем проблема-то? Map.get не работает?
источник