2017-09-06 83 views
0

我目前使用Node.js +分析服务器为一个应用程序,使用客户端的大部分分析SDK,还有很多更改和重构到应用程序完成。这款应用程序存在的一个问题是,某些逻辑应该位于云代码中,而不是内置于客户端中。设置替代Node.js服务与本地分析服务器通信

目前我只有一个非常小的一堆建在解析云码功能,和他们是一个很大的混乱,这是因为:

  • 问题1:解析云代码不允许ES6。甚至不支持承诺。这使得它的代码非常难看,与其他应用程序截然不同,这些应用程序大部分都使用ES6 + TS(它是一个Ionic 3/Angular 4应用程序)。
  • 问题2:我讨厌所有这些功能在一个文件中。看起来很难扩展,并且越来越难以浏览它们。
  • 问题3:这个应用程序被设计为“相当大”。我们需要做的一项改变是将mongodb服务器更改为另一台机器,这样网络和服务器负载就更容易管理,但我认为将Parse Server实例与执行后端的实例分开也是一件好事逻辑。

恢复:我认为最好的解决方案是制作一个Node.js实例来管理云代码。它将拥有主密钥和对Parse服务器的完全访问权,所以它可以像客户端一样工作,但不会将逻辑暴露给假想的攻击者。

你会如何做到这一点?我应该考虑哪些考虑因素?

谢谢!

+0

您的Parse Server托管在哪里? – toddg

回答

2

您应该了解的一件事是:Parse Server是一个Node.js服务器。它只是处理许多事情,例如认证,会话管理等,开箱即用。

为了解决您的具体问题:

  • 问题一:解析云代码实际上确实支持ES6。我必须将'use strict';添加到我的文件顶部才能使其正常工作。解析支持承诺。它不仅具有Parse原生承诺库(here),还可以将任何Promise库添加为NPM模块。我通常会将Bluebird添加到我的package.json中,以便我可以使用一些很酷的收集方法(地图,每个等)。
  • 问题二:我承认,将所有函数放在一个文件中有点麻烦,但我想出了一个解决方案,使它更容易一些:我只是将(request, response)传递给功能在不同的模块:

    const userTrigger = require('./triggers/userTrigger.js'); 
    
    Parse.Cloud.beforeSave('_User', (request, response) => { 
        userTrigger.beforeSave(request, response); 
    }); 
    
    // *notice ES6 syntax above 
    
  • 问题三:我不知道你的问题是在这里。你是否在Parse Server的同一台机器上托管MongoDB实例?那么,是的,我认为你应该在另一台机器上托管它。但是我认为你拥有一个托管你的后端逻辑的“客户端”的方法是过量的。只是重申一下:Parse Server是一个后端服务器...这是您的后端逻辑应该驻留的地方。

让我知道你是否仍然有麻烦。即使您不使用云代码,仍然可以在与Parse Server相同的机器上托管传统的API端点。看看Parse Server中的index.js,我已经在这个级别编写了很多函数,这样我就可以绕过应用程序的Parse Server组件。

2

我会加倍使用类似的响应,我们有一个可以处理1000或RPS的设置,云代码是合理的'需要'进入解析服务器'运行时'解析服务器将代码注入stsrtj'。

我们还有一些后端以节点形式与parse-server分离,这些服务使用/产生数据进/出parse-server。