Веб-сокет SailsJs с пользовательским маршрутом вместо чертежа? - PullRequest
0 голосов
/ 21 октября 2018

Я слежу за официальными парусами Документы .Хотелось бы реализовать основную функциональность сокетов, то есть клиент подключается к сокету, и когда сервер уведомляет его об ответе, выполняет сценарий.

Проблема в том, что запросы сокетов являются http, и я получаю badRequest.

Как правильно зарегистрировать маршрут сокета в Sails?

Мой код клиента:

io.socket.on('hello', function (data) {
    console.log('Socket `' + data.id + '` joined the party!')
  })
io.socket.get('/sayhello', function gotResponse(data, jwRes) {
    console.log('Server responded with status code ' + jwRes.statusCode + ' and data: ', data);
  });

Контроллер:

module.exports = {
exits: {
    badRequest: {
      responseType: 'badRequest',
      description: 'The provided data is invalid.',
    },
},
fn: async function (req, res) {
  if (!req.isSocket) {
    return res.badRequest();
  }
  sails.sockets.join(req, 'funSockets');
  sails.sockets.broadcast('funSockets', 'hello', {howdy: 'hi there!'}, req);
  return res.json({
    anyData: 'we want to send back'
  });
}

}

Маршрут:

'GET /sayhello':   { action: 'project/api/app-socket' },

1 Ответ

0 голосов
/ 06 марта 2019

В вашем файле rout.js есть:

'GET /sayhello':   { action: 'project/api/app-socket' },

Добавить к этому isSocket: true.Итак, сделайте это:

'GET /sayhello':   { action: 'project/api/app-socket', isSocket: true },

Как я это узнал?

Соглашение для конечных точек подписки состоит в том, чтобы использовать действие с префиксом «подписаться», поэтому, когда я сгенерировал действие с этой командой иэтот префикс:

sails generate action task/subscribe-to-task

Затем он дал мне эту подсказку в выводе терминала:

Successfully generated:
 •- api/controllers/task/subscribe-to-task.js

A few reminders:
 (1)  For most projects, you'll need to manually configure an explicit route
      in your `config/routes.js` file; e.g.
          'GET /api/v1/task/subscribe-to-task': { action: 'task/subscribe-to-task', isSocket: true },

Вот так я узнал, что нам нужно добавить isSocket: true.

...