JavaScript 与其他语言:如何让前端与后端和谐共处

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript —— 语言外交官:它如何与 Python、C++ 及其他语言沟通

\n\n

开发世界早已不再是“单一语言”的时代。项目完全用 PHP 或 Java 编写的日子早已过去。如今,我们生活在多语言编程的时代,而 JavaScript 在这个生态系统中扮演着首席外交官的角色。它能够与任何语言协作:从 Python 到 C++,从 Go 到 Rust。问题只在于如何组织这一切。

\n\n

让我们来探讨如何将 JavaScript 与其他语言集成。不掺水分,提供真实代码示例和实际场景。您将了解如何让前端和后端协同工作,而不是相互对抗。

\n\n

为什么要把 JavaScript 与其他语言结合起来?

\n\n

似乎何必自找麻烦?有 Node.js 在,全用 JS 写就行了。但现实更复杂。每种语言都有自己的超能力:

\n\n
    \n
  • Python —— 机器学习和数据科学之王。JS 在这方面无能为力。
  • \n
  • C++ —— 游戏和图形领域的极致性能。
  • \n
  • Java —— 企业级解决方案的可靠性。
  • \n
  • Go —— 微服务中的异步性和速度。
  • \n
\n\n

将 JavaScript 与这些语言集成,可以让您取长补短。您将获得基于 React 的漂亮界面,以及底层基于 Python 的强大分析能力。听起来像梦想?让我们把它变成现实。

\n\n

JavaScript 与 Python 的集成方式

\n\n

1. 通过 child_process 从 Node.js 调用 Python

\n\n

最简单直接的方式 —— 将 Python 脚本作为子进程运行。这并不优雅,但随处可用。

\n\n
// app.js — Node.js 调用 Python\nconst { exec } = require('child_process');\n\nfunction analyzeSentiment(text) {\n    return new Promise((resolve, reject) => {\n        exec(`python3 sentiment.py "${text}"`, (error, stdout, stderr) => {\n            if (error) return reject(error);\n            resolve(stdout.trim());\n        });\n    });\n}\n\n// 使用示例\n(async () => {\n    const result = await analyzeSentiment('JavaScript 是最好的语言!');\n    console.log(`情感倾向: ${result}`);\n})();\n
\n\n

这是 Python 脚本本身:

\n\n
# sentiment.py\nimport sys\nfrom textblob import TextBlob\n\ntext = sys.argv[1]\nblob = TextBlob(text)\nprint(blob.sentiment.polarity)\n
\n\n

缺点:每次调用都会启动一个新进程。生产环境请使用 python-shell 或 zerorpc。

\n\n

2. 通过 REST API 连接(Flask + Node.js)

\n\n

更合理的方式 —— 搭建一个 Python 微服务,并通过 HTTP 与其通信。

\n\n
# server.py — Python Flask API\nfrom flask import Flask, request, jsonify\nimport joblib\n\napp = Flask(__name__)\nmodel = joblib.load('model.pkl')\n\n@app.route('/predict', methods=['POST'])\ndef predict():\n    data = request.json\n    prediction = model.predict([data['features']])\n    return jsonify({'result': prediction.tolist()})\n\nif __name__ == '__main__':\n    app.run(port=5000)\n
\n\n

在 JavaScript 端:

\n\n
// client.js — Node.js 客户端\nasync function getPrediction(features) {\n    const response = await fetch('http://localhost:5000/predict', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ features })\n    });\n    return response.json();\n}\n\n// 调用示例\ngetPrediction([1.2, 3.4, 5.6]).then(console.log);\n
\n\n

这种方法在 90% 的 JavaScript 与 Python 集成场景中使用。微服务架构是王道。

\n\n

3. 在浏览器中运行 Python:Brython 和 Pyodide

\n\n

想在前端直接运行 Python?使用 Pyodide —— CPython 的 WebAssembly 移植版。

\n\n
<!DOCTYPE html>\n<html>\n<head>\n    <script src="https://cdn.jsdelivr.                

博客

书籍推荐