NodeJS / Electron关于客户端/服务器代码的混淆

时间:2016-03-05 20:03:26

标签: node.js electron

这是一个初学者的问题。我以前没有使用过NodeJS,所以对我来说有点混乱。我没有看到服务器模块和客户端模块之间的明确分离。看起来我可以使用“npm”(Node的包管理器)来安装客户端模块和服务器模块。

我的问题与此页面特别相关: http://electron.atom.io/docs/v0.36.8/api/synopsis/

它说我可以在客户端使用Node模块:

  

除了使用节点模块的额外功能外,渲染器进程与普通网页没有什么不同:

    <!DOCTYPE html>
    <html>
    <body>
    <script>
      const remote = require('electron').remote;
      console.log(remote.app.getVersion());
    </script>
    </body>
    </html>

这有什么用呢?节点在服务器端运行,浏览器(他们称之为“渲染器”进程)如何能够使用Node的包?

4 个答案:

答案 0 :(得分:3)

主要过程&amp;渲染器!=服务器&amp;客户端

NodeJS是服务器端,而不是客户端 在桌面应用程序上,您不必拥有服务器。 但是使用电子,你可以在你的app中直接使用节点。

简单方法:借助电子,将NodeJS视为一个工具箱来做很酷的事情。 就像Filesystem操作一样,忘记了客户端和服务器的事情。

(你不能用jquery等做的事情,但桌面应用需要的东西)

电子:主要流程和渲染器

主要流程用于处理/创建BrowserWindows(渲染器) 并且用于从一个渲染器 - 窗口到另一个渲染器的一些通信。 (也许还有一些其他特殊的东西)

渲染器是您真正运行应用程序的最佳位置。 通过节点,您可以获得所需的一切。 在一个地方轻松调试(chrome dev工具)。

渲染器中的节点示例

您可以要求"fs" > NodeJS File System
从Harddrive读取文件或文件夹。

您可以在html文件(脚本标记)中执行此操作 它由渲染器/浏览器窗口显示。

这对我来说也很混乱,我的回答肯定不是完全正确的。 但我的提示是,尝试在渲染器中执行所有操作。当你必须使用主要过程时,你会注意到。

答案 1 :(得分:1)

感谢大家的回答。我想在阅读本页后我现在明白了:

http://electron.atom.io/docs/v0.36.8/api/remote/

所以,我完全误解了Electron是什么。我认为它基本上是在NodeJS和Chromium浏览器上运行的HTTP服务器,所以我认为客户端和服务器之间的分离应该与创建网站时的分离相同。

然而,根本不是这样的。您似乎可以通过IPC(进程间通信)直接与服务器通信,因此它与HTTP客户端/服务器完全不同:

  

远程模块提供了一种在渲染器进程(网页)和主进程之间进行进程间通信(IPC)的简单方法。

答案 2 :(得分:0)

我认为他们想说的是你也可以使用通常指定用于Node的模块在前端使用。由于Electron被设计为用作桌面应用程序而不是浏览器,因此可以更轻松地交换代码。

我不确定你什么时候想要使用它。我认为他们这样做是为了更容易地集成像bluebird.js这样的东西,这是一个我很容易在前端和后端包上使用的promise库,即使它主要用于NodeJS。

该代码显示的是您可以通过以下方式导入模块:

const remote = require('electron').remote;
console.log(remote.app.getVersion());

这是说用('electron').remote加载我的'服务器端'应用程序,现在让我通过remote.app.bluebird调用这些程序包。您可能不是每个人都需要或想要使用它,但它可用。

我认为关于这个的很棒的事情是如果你专门为Electron构建一个库,你可以用它来编写它,使它在服务器端和客户端更加无缝。如果你曾经使用它,这将是socket.io的工作方式。服务器端和客户端的语法几乎相同,但他们必须单独编写它们,因此一个服务器端工作,一个工作客户端。有了这个,就可以为所有内容使用相同的代码库。

虽然我再次确切知道一个好的/完美的用例可能是什么。当然,我认为你可以在一边保留一个JSON商店,然后用一些整洁的进口把它拉进来,再次不确定它有多么有用。

答案 3 :(得分:0)

official electron tutorial中,他们指出:

  

您可以在应用程序中使用Node.js模块。选择你喜欢的   npm模块。 npm提供了目前世界上最大的存储库   开源代码– 使用维护良好且经过测试的代码的能力   过去保留给服务器应用程序的资源是关键之一   电子的功能。

     

例如,要在您的应用程序中使用官方的AWS开发工具包,您需要   首先将其安装为依赖项:

npm install --save aws-sdk
     

然后,在您的Electron应用程序中,就像使用   构建Node.js应用程序:

// A ready-to-use S3 Client
const S3 = require('aws-sdk/clients/s3')

通过这种方式,Electron与普通Web应用程序不同,在常规Web应用程序中,您不能仅使用npm中的某些节点模块来完成工作。

正如官方电子教程所指出的那样,“这是电子的关键特征之一。” ,因为它使解决某些问题的方式变得更加容易。

例如,假设您要编写一个简单的markdown应用程序。有一个名为markdown-it的节点模块。像implementation for StudyMD一样,使用Electron您可以 require 并直接在客户端/渲染过程代码中使用它。