Запуск приложения NodeJS с Socket IO на общем сервере CPanel Неожиданный токен - PullRequest
0 голосов
/ 11 апреля 2020

Я создал очень простое приложение IO для сокетов, которое получает сообщение и отправляет его обратно в группу сокетов.

Приложение успешно работает на моем компьютере Windows с Node.js v12.14.0. Но я хочу избавиться от переадресации портов, поэтому спросил моего хостера, можно ли запустить приложение Node.js на Cpanel. Они не были поклонниками, но открыли это.

Я должен был установить зависимости вручную, но, наконец, больше не получал ошибку зависимости при запуске приложения, но в итоге получил ошибку ниже. После некоторой работы с Google это, вероятно, связано с версией Node.js на сервере v6.16.0. Хостер говорит, что они не могут получить это обновление, так как оно идет с cpanel. Теперь я надеялся, что есть способ запустить мое приложение. js на этой версии.

Ошибка:

enter code here[username@server app]$ node /home/username/domains/website.nl/app/app.js
/home/username/domains/website.nl/app/node_modules/ws/lib/websocket.js:347
  ...options
  ^^^

SyntaxError: Unexpected token ...
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:549:28)
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32)
at tryModuleLoad (module.js:453:12)
at Function.Module._load (module.js:445:3)
at Module.require (module.js:504:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/home/username/domains/website.nl/app/node_modules/ws/index.js:3:19)
[username@server app]$ node -v
v6.16.0

Приложение:

var fs = require('fs');
var https = require('https');


var prvKey = fs.readFileSync('/home/username/ssl/keys/1.key').toString();
var prvCert = fs.readFileSync('/home/username/ssl/certs/1.crt').toString();
var server = https.createServer({key:prvKey,cert:prvCert});

var serverPort = 3000;

// var server = https.createServer();
var io = require('socket.io')(server);

server.listen(serverPort, function() {
  console.log('server up and running at %s port', serverPort);
});



io.on("connection", function(socket) {
    console.log("user connected: " + socket.id + " - " + socket.request.connection.remoteAddress);
    var activequizid = null;
    socket.on('jsondata', function(data){
        if(data.join.join == "true"){
            console.log(socket.id + " join group " + data.join.quizid)
            socket.join(data.join.quizid)
        }
    })
    socket.on('jsondataupdate', function(data){
        console.log(data.update)
        if(data.update.status){
            socket.to(data.update.quizid).emit('update', data.update);
        }
    })

    socket.on("disconnect", function(socketd) {
        console.log(socketd)
        console.log(this.id)
    });

    socket.on('connection', function () {
        console.log('connection!')
    })

    socket.on('reconnecting', function () {
        console.log('reconnecting!')
    })

    socket.on('reconnect', function () {
        console.log('reconnect!')
    })

    socket.on('disconnect', function () {
        console.log('disconnect!')
    })

});

console.log("sever online")

websocket. js (частично функция с ошибкой (ищите "... options")):

  send(data, options, cb) {
      if (this.readyState === WebSocket.CONNECTING) {
        throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
      }

      if (typeof options === 'function') {
        cb = options;
        options = {};
      }

      if (typeof data === 'number') data = data.toString();

      if (this.readyState !== WebSocket.OPEN) {
        sendAfterClose(this, data, cb);
        return;
      }

      const opts = {
        binary: typeof data !== 'string',
        mask: !this._isServer,
        compress: true,
        fin: true,
        ...options
      };

      if (!this._extensions[PerMessageDeflate.extensionName]) {
        opts.compress = false;
      }

      this._sender.send(data || EMPTY_BUFFER, opts, cb);
    }
...