Синтаксическая ошибка при попытке преобразовать HTML-файл в JavaScript, содержащий сокет io, SyntaxError: Неожиданный токен - PullRequest
1 голос
/ 31 марта 2019

Я хотел бы преобразовать HTML-код в JavaScript.В настоящее время я могу отправить сообщение из файла HTML на сервер Python, который затем переворачивается и отправляется обратно в HTML через сокет io.Я использовал этот учебник: https://tutorialedge.net/python/python-socket-io-tutorial/

Теперь я хочу вместо отправки сообщения щелкнуть по кнопке на веб-странице, вместо этого я могу запустить файл JavaScript из командной строки, поэтому

узел index.js

Мой index.js ниже:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
<script>
  const socket = io("http://localhost:8080");

  function sendMsg() {   
    socket.emit("message", "HELLO WORLD");
  }

  socket.on("message", function(data) {
     console.log(data);
  });
</script>

При работе index.js Я получаю эту ошибку:

/home/name/Desktop/Research/server_practice/name/tutorialedge/js_communicate/index_1.js:1
(function (exports, require, module, __filename, __dirname) { <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>


SyntaxError: Unexpected token <
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:188:16)
    at bootstrap_node.js:609:3

В выводе ошибки курсор указывает на вторую часть кавычек:

socket.io/2.2.0/socket.io.js">
                            ^

Я почти уверен, что это проблема синтаксиса в сочетании с использованием socket io, но я не уверен, в чем именно заключается проблема.Я считаю, что я использую какой-то псевдо HTML / JavaScript код, поэтому я получаю сообщение об ошибке.Я новичок в JavaScript, но мне нужно его использовать, потому что он содержит нужные мне API.

Для ясности, это рабочий HTML-код из учебника, index.html :

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <button onClick="sendMsg()">Hit Me</button>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
    <script>
      const socket = io("http://localhost:8080");

      function sendMsg() {   
        socket.emit("message", "HELLO WORLD");
      }

      socket.on("message", function(data) {
         console.log(data);
      });
    </script>
  </body>
</html>

А вот код сервера Python, server.py

from aiohttp import web
import socketio

# creates a new Async Socket IO Server
sio = socketio.AsyncServer()
# Creates a new Aiohttp Web Application
app = web.Application()
# Binds our Socket.IO server to our Web App
# instance
sio.attach(app)

# we can define aiohttp endpoints just as we normally
# would with no change
async def index(request):
    with open('index.html') as f:
        return web.Response(text=f.read(), content_type='text/html')

# If we wanted to create a new websocket endpoint,
# use this decorator, passing in the name of the
# event we wish to listen out for
@sio.on('message')
async def print_message(sid, message):
    print("Socket ID: " , sid)
    print(message)
    # await a successful emit of our reversed message
    # back to the client
    await sio.emit('message', message[::-1])

# We bind our aiohttp endpoint to our app
# router
app.router.add_get('/', index)

# We kick off our server
if __name__ == '__main__':
    web.run_app(app)

Конечная цель - отправить несколько потоков данных из JavaScript в Python длябыть проанализирован и отправлен обратно в JavaScript для вывода через API.

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Теги скрипта не работают в узле.Вам необходимо использовать require для импорта модулей.

Вы можете использовать клиентский модуль socket.io для подключения к сокету io с использованием узла.Обратите внимание, что вам придется npm install использовать его перед использованием

Пример кода подключения, адаптированного из файла readme клиента socket.io:

var socket = require('socket.io-client')('http://localhost:8080');
socket.on('connect', function(){});

function sendMsg() {   
    socket.emit("message", "HELLO WORLD");
}

socket.on("message", function(data) {
    console.log(data);
});

socket.on('disconnect', function(){});
0 голосов
/ 31 марта 2019

<script> теги являются HTML-тегами - их нет в файле JavaScript. Просто поместите ваш JavaScript:

const socket = io("http://localhost:8080");

function sendMsg() {   
    socket.emit("message", "HELLO WORLD");
}

socket.on("message", function(data) {
    console.log(data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...