【发布时间】:2019-11-22 11:52:38
【问题描述】:
我使用 Node.js 用 JavaScript 编写了一个程序(目前更像是一个网站)。你可以在这里找到它:https://github.com/bhofff/Wikipedia-Image-Data-Tool
我对与 JavaScript 有关的几件事有点困惑,并且想知道如何从 python 文件运行包含 JavaScript API 的函数。
首先是一些背景。
该程序的目的是使用 Wikipedia API 下载特定页面上的所有图像、它们各自的描述以及主体页面。它为我桌面上的每个页面创建一个新文件,以页面命名,所有文件都放在那里。
到目前为止,处理从 Wikipedia 获取所有数据的 Wiki.js 文件在服务器上运行,来自 index.ejs(类似于 html)。 Node 运行启动服务器的 app.js。您转到http://localhost:3000/wiki 并输入您想要的维基百科页面的名称,然后它将其发送到 Wiki.js,后者收集图像 URL 和文本字符串并将它们发送到未托管在服务器上的 wikiController.js 并处理创建带有页面名称的文件夹,并将图像和文本文件下载到该文件夹。
我的问题。
我的第一个问题是 Wiki.js 是否必须托管在服务器上。我相信确实如此,但只是好奇。
假设它确实如此,并且我将它托管在服务器上,我需要什么才能让 python 脚本从我的计算机调用它(发送页面名称)并接收回数据?基本上,我想将 Wiki.js 包装在一个可由 python 脚本调用的 API 中。
-
接下来我不想使用 Node.js 下载任何东西。这个问题对我来说是最令人困惑的,因为即使我为 wikiController.js 编写了所有代码,但我实际上并不知道它在客户端还是服务器上运行?我的理解是:
I) Node 运行 app.js,
II) 然后在 app.js 里面我做:
var express = require('express');
var wikiController = require('./controllers/WikiController');
var app = express();
wikiController(app);
它运行 wikiController.js 并发送某种 var/object (app) 以便可以在 wikiController.js 中使用??
III) 然后我们开始托管服务器:
app.listen(3000, function() {
console.log('we be listening to da port of 3000');
});
但是“wikiController(app);”首先发生,所以 wikiController.js 只是编辑“app”对象/whatever-it-is,以便在服务器启动时的下一行,它知道 pare 的 html(ejs) 是什么以及对所有的做什么请求?
这与我的第一个问题有关,因为我认为“Java 创建的应用程序在虚拟机或浏览器中运行,而 JavaScript 代码仅在浏览器上运行。”节点是什么允许我在我的计算机上运行 JavaScript?我很困惑。
如果我将 API 托管在 GitHub 上,它就可以工作,对吗?感觉是个愚蠢的问题,但我只是想确定一下。
我可以使用 .py 或 .java 来运行 app.js 并将服务器本地化(假设我已经重新编码 app.js 以不使用 Node)?
//example 1
$.ajax({
type: 'POST',
url: '/wiki/' + 'descriptions',
data: tempDes,
success: function(sendData) {
}
});
//example 2
$.ajax({
type: 'POST',
url: '/wiki/' + foldername,
data: foldername,
success: function(folderData) {
}
});
我希望它如何工作。
1) 我可能从 GitHub 托管服务器。
2) thing1.py 调用 thing2(python 或 java 或 JavaScript,我不在乎)并向 thing2 发送两个字符串('页面标题','文件目录位置')。
3) thing2 将“页面标题”发送到 GitHub 上的服务器/API
4) GitHub 服务器将执行它在 Wiki.js 中已经执行的所有操作,但不是在每个函数中执行第二个 POST 请求(例如第 145-151、159-166 行 也显示在上面 ) 它将数据(图像和文本字符串)在 API 的“success:”字段中发送回下载它的 thing2。
非常感谢您提前提供的任何帮助!
【问题讨论】:
-
您的 API 应托管在始终运行的服务器上,您不能将其托管在 Github 上(Github 仅托管代码)。从那里,您将能够从任何其他机器(包括同一台机器)调用 API。在这种情况下,node.js 应用程序是服务器。接下来,您可以创建一个客户端应用程序/脚本来与服务器交互。首先,您需要创建一个快速路由,允许您的 API 将您想要发送到客户端的数据发送到客户端。接下来,如果您想使用 python 进行调用,请查看本教程:realpython.com/python-requests
-
我的建议是执行以下操作: 1. 创建一个节点 api 服务器来处理与维基百科的所有交互 2. 在 python 中创建一个与节点服务器交互的客户端应用程序
标签: javascript java python node.js api