Проблемы с отправленными событиями на сервере Javascript / Node (с помощью Sapper) - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь получать обновления smsStatus на клиенте, когда POST-данные поступают на мой сервер. На данный момент у меня есть кнопка для подделки фиктивных данных POST на мой сервер. Это работает, как ожидалось, но, похоже, не обновляет мой клиент. Я подозреваю, что моя проблема заключается в том, как мой GET возвращает данные.

На стороне клиента : index. html

const sse = new EventSource("smsstatus");
sse.onmessage = e => {
  console.log("client sse:", e.data);
};

// faking a webhook POST, I have a button calling queued()
const queued = () => {
  fetch("/smsstatus", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      SmsSid: "SM99a0439b741d4034bdbde2b70801a191",
      SmsStatus: "queued",
      MessageStatus: "queued",
      To: "+15558675310",
      MessageSid: "SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      AccountSid: "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      From: "+15017122661",
      ApiVersion: "2010-04-01"
    })
  });
};

На стороне сервера : smsstatus. js

Обратите внимание, что мой экспресс / узел не является стандартным, потому что я использую Sapper , где "Маршруты сервера - это модули, записанные в. js экспортируемых файлах функции, соответствующие методам HTTP. Каждая функция получает объекты запросов и ответов HTTP в качестве аргументов, а также следующую функцию. " Хотя это немного странно, но я не думаю, что это связано с моей проблемой (без ошибок соединения, 404 с, и т. Д. c). bopyparser импортируется и работает.

let data; // global to pass data between POST/GET

// for smsCallback webhook
export async function post(req, res, next) {
  console.log("POST...");
  const { SmsSid, SmsStatus } = req.body; 
  data = req.body;
  console.log(SmsSid, SmsStatus);
  get(req,res)
}

// for sse connection
export async function get(req, res) {
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Connection': 'keep-alive',
    'Cache-Control': 'no-cache'
  });
  console.log("get",data);
  res.write(`\n{data: ${data}\n\n}`);
}

клиентская консоль ничего не показывает, а серверная консоль показывает

POST...
SM99a0439b741d4034bdbde2b70801a191 queued
get {
  SmsSid: 'SM99a0439b741d4034bdbde2b70801a191',
  SmsStatus: 'queued',
  MessageStatus: 'queued',
  To: '+15558675310',
  MessageSid: 'SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  AccountSid: 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  From: '+15017122661',
  ApiVersion: '2010-04-01'
}
...