2016-01-05 2 views
0

У меня есть веб-страница, которая должна запускать некоторые вычисления при запуске. Я хочу сохранить это вычисление на стороне сервера, чтобы клиент не мог получить доступ к исходному коду. Я обнаружил pico, модуль, который должен быть «мостом между серверным python и JavaScript на стороне клиента».Запуск серверного python в JS: трудности с pico

У меня есть просто test.py:

import pico 

def hello(): 
    return "Hello World" 

My JavaScript также прост:

pico.load("../../../test.py"); 
pico.main = function() { 
    var displayMessage = function(message){ 
     console.log("hello2"); 
     console.log(message); 
    } 
    test.hello(displayMessage); 
} 

"../../../test.py" относительное расположение скрипта python в папку pico

Затем я запускаю «python -m pico.server» в командной строке. Когда я перехожу на свою веб-страницу, откройте инспектор и зайдите на консоль, я получаю сообщение об ошибке: «Uncaught SyntaxError: Unexpected token i». «i» предположительно является результатом импорта первой строки. Обратите внимание, что эта же ошибка возникает, если я не запускаю команду pico.server.

Любая помощь будет отличной, а также предложения по альтернативным методам выполнения этого serveride vs clientside.

+0

Как веб-страница включает JavaScript? Вы также загружаете клиент pico в соответствии с примером на странице pico, которую вы ссылаетесь? – holdenweb

+0

javascript находится в файле index.html, вызываемом во время события ввода пользователя (перемещение слайдера). Я поставил оператор console.log в этой области, чтобы убедиться, что он попадает туда, когда используется ползунок. Я не уверен, что вы подразумеваете под «загрузкой клиента pico». На какую часть учебника pico вы ссылаетесь? Заранее спасибо. –

+0

Не могли бы вы изменить первую строку из 'import' на что-то еще? например 'raise AssertionError' и проверить, изменился ли' i' на 'r'? – AbdealiJK

ответ

0

Возможно, у меня есть ответ для вас, однако я не смог воспроизвести ту же ошибку.

  • pico.load, кажется, не работает, если расширения файлов включены в аргументе, это связано с функцией проектируется для загрузки суб-модулей непосредственно (т.е. module.sub_module), как и в pico API:

pico.load(module, [callback])

Load the Python module named module. The module will be available as a global >variable of the same name. Submodules may be loaded by using dotted notation e.g. module.sub_module

чтобы убедиться, что я включил «.py» расширение файла на тестовой странице пико я работал, и это не удалось загрузить модуль, так что это может быть проблемой, если вы используете файл extensi на.

  • Другой возможный вопрос был упомянут в комментарии по holderweb. В первом pico example HTML файл client.js включен во внешний тег <script>, сюда входят функции, необходимые для использования pico. Таким образом, вы должны иметь что-то похожее на следующий тег в вашей index.html головной секции: <script type="text/javascript" src="/pico/client.js"></script>

Для большего понимания я был бы заинтересован в том, что/если логи сервера в командной строке, когда происходит ошибка, и также содержимое вашей страницы index.html. Надеюсь, это помогло!