Как реализовать экспресс-WS маршрут - PullRequest
0 голосов
/ 03 июня 2018

ОБНОВЛЕНИЕ:

Мне нужно было правильно настроить express-ws:

const express = require('express');
let expressWs = require('express-ws');
expressWs = expressWs(express());
const app = expressWs.app;
const router = express.Router();

const createError = require('http-errors');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
...
const playerHeadingRouter = require('./routes/playerHeading')(router, db);

вместе с моим модулем маршрута:

module.exports = (router, db) => {
  router.get('/api/player/:id', (req, res, next) => {
    res.end();
  });

  router.ws('/api/player/:id', (ws, req) => {
    ws.on('message', function(msg) {
      const coords = JSON.parse(msg);
      db.any(`UPDATE "user" SET x = ${coords.x} WHERE id = ${req.params.id}`)
      db.any(`UPDATE "user" SET y = ${coords.y} WHERE id = ${req.params.id}`)
      db.any(`UPDATE "user" SET geom = ST_SetSRID(ST_MakePoint(x, y),27700) WHERE id = ${req.params.id}`)
        .then(() => {
          // success;
          console.log('msg', msg);
        })
        .catch(error => {
          // error;
          console.log('error', error);
        });
    });
    // socket
  });
}

сейчас, когда я используюклиент chrome websockets, я могу установить соединение с:

ws://localhost:3001/api/player-heading/2

и отправить сообщение, которое используется в запросе БД, с моего экспресс-сервера.

1 Ответ

0 голосов
/ 03 июня 2018

Если вы размещаете конечную точку веб-сокета, вы не сможете получить к ней доступ через HTTP.Вам нужно будет подключиться к конечной точке ws: // с помощью клиента websocket.Для этого вы можете использовать расширение Chrome , например .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...