如何创建可从Python调用的JavaScript API?

时间:2019-07-12 17:28:17

标签: javascript java python node.js api

我使用Node.js用JavaScript编写了一个程序(当前有一个网站)。您可以在这里找到它:https://github.com/bhofff/Wikipedia-Image-Data-Tool

对于与JavaScript有关的几件事,我有些困惑,并且还想知道如何从python文件运行包含JavaScript API的函数。

首先了解一些背景。

该程序的目的是使用Wikipedia API在特定页面上下载所有图像,它们各自的描述以及主体页面。它为桌面上的每个页面创建一个新文件,并以该页面命名,所有文件都存储在该文件中。

到目前为止,用于从Wikipedia获取所有数据的Wiki.js文件是从and index.ejs(与HTML相似)在服务器上运行的。节点运行app.js来启动服务器。您转到http://localhost:3000/wiki并输入所需的Wikipedia页面的名称,它将其发送到Wiki.js,后者会收集图像URL和文本字符串,并将它们发送到未托管在服务器上并处理的WikiController.js。用页面名称创建文件夹,然后将图像和文本文件下载到其中。

我的问题。

  1. 我的第一个问题是Wiki.js是否必须托管在服务器上。我相信确实可以,但是只是很好奇。

  2. 假设它确实存在,并且我将其托管在服务器上,那么我需要什么,以便python脚本可以从我的计算机上调用它(发送页面名称)并接收回来的数据?基本上,我想将Wiki.js包装在可以由python脚本调用的API中。

  3. 下一步,我不想使用Node.js下载任何内容。这个问题对我来说最令人困惑,因为即使我为WikiController.js编写了所有代码,但实际上我不知道它在客户端还是服务器上的运行位置?我的理解是:

    I)节点运行app.js,

    II)然后在app.js中执行:

$('.presentation').on({
  mouseleave: function() {       
    this.timer = setTimeout(function () {}, 4000);
  },
  mouseenter: function() {
    if (this.timer) window.clearTimeout(this.timer)
  }
});

运行WikiController.js并发送某种var / object(应用程序),以便可以在WikiController.js中使用它?

III)然后我们开始托管服务器:

    var express = require('express');
    var wikiController = require('./controllers/WikiController');
    var app = express();
    wikiController(app);

但是“ wikiController(app);”首先发生,所以WikiController.js只是编辑“ app”对象/无论它是什么,以便在服务器启动的下一行中,它知道用于pare的html(ejs)是什么以及如何对所有对象进行操作请求?

这与我的第一个问题有关,因为我认为“ Java创建的应用程序可以在虚拟机或浏览器中运行,而JavaScript代码只能在浏览器中运行。” node是允许我在计算机上运行JavaScript的东西吗?我很困惑。

  1. 如果我将其托管在GitHub上,API将会起作用,对吗?感觉像个愚蠢的问题,但我只想确定。

  2. 我可以使用.py或.java来运行app.js并在服务器上运行localhost(假设我已经同意让app.js不使用Node了吗)?

    app.listen(3000, function() {
        console.log('we be listening to da port of 3000');
    });

我希望它如何工作。

1)我可能从GitHub托管服务器。

2)Thing1.py调用Thing2(我不在乎的python或Java或JavaScript)并将两个字符串发送到Thing2(“页面标题”,“文件目录位置”)。

3)Thing2将“页面标题”发送到GitHub上的服务器/ API

4)GitHub服务器将执行它已经在Wiki.js中执行的所有操作,但是它将在每个函数中执行而不是第二个POST请求(例如,上面的145-151、159-166行 ),它将在API的“成功:”字段中将数据(图像和文本字符串)发送回thing2,然后下载该数据。

非常感谢您提前提供的帮助!

1 个答案:

答案 0 :(得分:1)

好的,让我们大致按您要求的顺序进行此操作,但是在某些地方会有所不同。

这里有很多问题。这些中的第一个也是最重要的一点是,您实际上并不了解Node.js是什么或其功能。如您所建议的那样,Node.js是JavaScript的服务器端实现-换句话说,它使您可以在与Web浏览器完全分开的服务器上运行JavaScript(在这种情况下,服务器为localhost )。我真的建议您回去学习一下您正在使用的框架的基础知识,然后再尝试实现类似的东西。

如果Wiki.js与您的Node.js服务器进行交互,是的,您需要在服务器上进行交互。由于我不知道Wiki.js所包含内容的详细信息,因此很难比这更具体。再次,回到Node.js的基础可能会在这里有所帮助。

wikiController在您的服务器上运行,事实证明您正在app.js中调用它,它是服务器的 。调用wikiController(app);会“编辑” app对象,大概是在您开始侦听连接后扩展其功能。

GitHub不是服务器主机。 GitHub页面是静态HTML,因此您无法在它们上运行API。我建议您看一下Glitch,它将允许您托管Node.js服务器以测试您的API。它是免费的,但有一些限制,但是在您进行测试时,它们可能不会影响您。它还与GitHub集成,因此您可以将更改提交到GitHub存储库,并在Web服务器上自动更新。

为了“使用.py或.java运行app.js”,如果要运行Node,则需要使用Python或Java发出针对localhost的Web请求。 js应用程序在本地,或者您应该选择将其托管在网络上。

正如我所看到的,您在此处遇到的大多数问题是由于总体上缺乏对Node.js,JavaScript和API的基础知识所致。这不是一件坏事,但我建议您寻找深入的课程或创建简单服务器的指南,然后从那里开始。