在JS中运行服务器端python:pico的困难

Running server-side python in JS: difficulty with pico

本文关键字:pico python JS 运行 服务器端      更新时间:2023-09-26

我有一个网页需要在启动时运行一些计算。我希望将此计算保留在服务器端,这样客户端就无法访问源代码。我发现了pico,这个模块被认为是"服务器端python和客户端JavaScript之间的桥梁"。

我有一个简单的测试.py:

import pico
def hello():
    return "Hello World"

我的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"我大概是从第一行导入的。请注意,如果我不运行pico.server命令,也会发生同样的错误。

任何帮助都将是非常好的,以及关于服务器端与客户端端的替代方法的建议。

我可能有答案,但我无法复制相同的错误。

  • 当参数中包含文件扩展名时,pico.load似乎不起作用,这是因为函数被设计为直接加载子模块(即module.sub_module),如在pico API中:

pico.load(模块,[回调])

加载名为module的Python模块。该模块将作为同名的global>变量提供。子模块可以使用点符号加载,例如module.sub_module

为了确保我在我一直在处理的pico测试页面上包含了".py"文件扩展名,但它无法加载模块,所以如果你使用文件扩展名的话,这可能是个问题。

  • holderweb在评论中提到了另一个可能的问题。在第一个pico示例HTML中,文件client.js包含在外部<script>标记中,这包括使用pico所需的功能。因此,在index.html头部分中必须有类似于以下标记的内容:<script type="text/javascript" src="/pico/client.js"></script>

为了获得更多的见解,我有兴趣了解错误发生时服务器在命令行记录的内容,以及index.html页面的内容。希望这能有所帮助!