设置替代 Node.js 服务以在本地与 Parse Server 通信
Setting up an alternative Node.js service to locally communicate with Parse Server
我目前正在为一个应用程序使用 Node.js + Parse Server,使用来自客户端的大部分 Parse SDK,还有许多要对应用程序进行的更改和重构。这个应用程序的问题之一是,一些逻辑应该位于云代码而不是内置在客户端中。
目前我在 Parse Cloud Code 中构建的函数很少,而且很乱,因为:
- 问题 1:Parse Cloud Code 不允许 ES6。甚至不支持承诺。这使得它的代码非常丑陋,并且与应用程序的其余部分截然不同,应用程序的其余部分大部分都使用 ES6 + TS(它是一个 Ionic 3 / Angular 4 应用程序)。
- 问题 2: 我讨厌将所有这些功能放在一个文件中。看起来可扩展性差,浏览它们变得更加困难。
- 问题 3: 此应用程序设计为 "quite big"。我们有待进行的一个更改是将 mongodb 服务器更改为另一台机器,因此网络和服务器负载更易于管理,但我认为将 Parse Server 实例与实例分开也很好执行一些后端逻辑。
恢复:我认为最好的解决方案是创建一个 Node.js 实例来管理云代码。它将拥有主密钥和对 Parse 服务器的完全访问权限,因此它可以像客户端一样工作,但不会将逻辑暴露给假设的攻击者。
你会怎么做?我应该考虑哪些注意事项?
谢谢!
您应该了解的一件事是:Parse Server 是一个 Node.js 服务器。 它只处理许多事情,例如身份验证、会话管理等, -开箱即用。
解决您的具体问题:
- 问题一: 解析云代码实际上支持ES6。我必须将
'use strict';
添加到我的文件的顶部才能使其正常工作。 Parse 支持 promise。它不仅有一个 Parse-native promise 库(here),您还可以将任何 Promise 库添加为 NPM 模块。我通常将 Bluebird 添加到我的 package.json 中,这样我就可以使用一些很酷的收集方法(map、each 等)。
问题二:我承认将所有函数都放在一个文件中有点烦人,但我想出了一个解决方案这让它变得更容易一些:我只是将 (request, response)
传递给另一个模块中的函数:
const userTrigger = require('./triggers/userTrigger.js');
Parse.Cloud.beforeSave('_User', (request, response) => {
userTrigger.beforeSave(request, response);
});
// *notice ES6 syntax above
问题三:我不确定你的问题出在哪里。您是否将 MongoDB 实例与 Parse Server 托管在同一台机器上?那么,是的,我认为您应该将其托管在单独的机器上。但我认为您使用 "client" 来托管后端逻辑的方法有点矫枉过正。重申一下:Parse Server 是一个后端服务器……那是您的后端逻辑应该驻留的地方。
如果您仍有问题,请告诉我。即使您不使用云代码,您仍然可以拥有与 Parse Server 托管在同一台机器上的传统 API 端点。看看 Parse Server 中的 index.js,我在这个级别编写了很多函数,以便我可以绕过应用程序的 Parse Server 组件。
我会用类似的响应加倍,我们有一个处理 1000 或 RPS 的设置,云代码只是“要求”进入解析服务器,在 stsrtj 将您的代码注入解析服务器“运行时”。
我们还有用与解析服务器分离的节点编写的后端,consume/produce 解析服务器数据 in/out 的微服务。
我目前正在为一个应用程序使用 Node.js + Parse Server,使用来自客户端的大部分 Parse SDK,还有许多要对应用程序进行的更改和重构。这个应用程序的问题之一是,一些逻辑应该位于云代码而不是内置在客户端中。
目前我在 Parse Cloud Code 中构建的函数很少,而且很乱,因为:
- 问题 1:Parse Cloud Code 不允许 ES6。甚至不支持承诺。这使得它的代码非常丑陋,并且与应用程序的其余部分截然不同,应用程序的其余部分大部分都使用 ES6 + TS(它是一个 Ionic 3 / Angular 4 应用程序)。
- 问题 2: 我讨厌将所有这些功能放在一个文件中。看起来可扩展性差,浏览它们变得更加困难。
- 问题 3: 此应用程序设计为 "quite big"。我们有待进行的一个更改是将 mongodb 服务器更改为另一台机器,因此网络和服务器负载更易于管理,但我认为将 Parse Server 实例与实例分开也很好执行一些后端逻辑。
恢复:我认为最好的解决方案是创建一个 Node.js 实例来管理云代码。它将拥有主密钥和对 Parse 服务器的完全访问权限,因此它可以像客户端一样工作,但不会将逻辑暴露给假设的攻击者。
你会怎么做?我应该考虑哪些注意事项?
谢谢!
您应该了解的一件事是:Parse Server 是一个 Node.js 服务器。 它只处理许多事情,例如身份验证、会话管理等, -开箱即用。
解决您的具体问题:
- 问题一: 解析云代码实际上支持ES6。我必须将
'use strict';
添加到我的文件的顶部才能使其正常工作。 Parse 支持 promise。它不仅有一个 Parse-native promise 库(here),您还可以将任何 Promise 库添加为 NPM 模块。我通常将 Bluebird 添加到我的 package.json 中,这样我就可以使用一些很酷的收集方法(map、each 等)。 问题二:我承认将所有函数都放在一个文件中有点烦人,但我想出了一个解决方案这让它变得更容易一些:我只是将
(request, response)
传递给另一个模块中的函数:const userTrigger = require('./triggers/userTrigger.js'); Parse.Cloud.beforeSave('_User', (request, response) => { userTrigger.beforeSave(request, response); }); // *notice ES6 syntax above
问题三:我不确定你的问题出在哪里。您是否将 MongoDB 实例与 Parse Server 托管在同一台机器上?那么,是的,我认为您应该将其托管在单独的机器上。但我认为您使用 "client" 来托管后端逻辑的方法有点矫枉过正。重申一下:Parse Server 是一个后端服务器……那是您的后端逻辑应该驻留的地方。
如果您仍有问题,请告诉我。即使您不使用云代码,您仍然可以拥有与 Parse Server 托管在同一台机器上的传统 API 端点。看看 Parse Server 中的 index.js,我在这个级别编写了很多函数,以便我可以绕过应用程序的 Parse Server 组件。
我会用类似的响应加倍,我们有一个处理 1000 或 RPS 的设置,云代码只是“要求”进入解析服务器,在 stsrtj 将您的代码注入解析服务器“运行时”。
我们还有用与解析服务器分离的节点编写的后端,consume/produce 解析服务器数据 in/out 的微服务。