Node.js 如何使用MongoDB在Heroku上托管自己的解析服务器?

Node.js 如何使用MongoDB在Heroku上托管自己的解析服务器?,node.js,mongodb,heroku,parse-platform,parse-server,Node.js,Mongodb,Heroku,Parse Platform,Parse Server,(要清楚,我问这个问题是为了提供我在帮助其他同样受到解析闭包影响的人时找到的答案) 最近,他们宣布将于2017年1月关门,但谢天谢地,他们已经做出了自己的决定,这样我们都可以托管自己的解析服务器实例 我已经研究了托管解析服务器的各种可用选项,并决定在Heroku上托管我的解析服务器 我喜欢解析,因为它非常容易使用,而且我没有设置后端的实际经验。我试着在网上阅读了几本指南,但发现它们都有点难以理解,因为有些模糊的步骤或步骤会让你在另一个网站上陷入困境,安装了很多工具,这一切都有点让人困惑 我如何在

(要清楚,我问这个问题是为了提供我在帮助其他同样受到解析闭包影响的人时找到的答案)

最近,他们宣布将于2017年1月关门,但谢天谢地,他们已经做出了自己的决定,这样我们都可以托管自己的解析服务器实例

我已经研究了托管解析服务器的各种可用选项,并决定在Heroku上托管我的解析服务器

我喜欢解析,因为它非常容易使用,而且我没有设置后端的实际经验。我试着在网上阅读了几本指南,但发现它们都有点难以理解,因为有些模糊的步骤或步骤会让你在另一个网站上陷入困境,安装了很多工具,这一切都有点让人困惑

我如何在heroku上托管Parse Server,将其设置为接受来自我的应用程序的跨域请求,创建MongoDB数据库,并将我的所有数据从Parse迁移到新数据库?

heroku上的自托管Parse Server
设置Heroku、MongoDB和Parse
  • 访问并注册帐户
  • 验证您的电子邮件,并登录Heroku
  • 单击“部署到Heroku”

  • 为解析服务器指定一个名称
  • 现在跳过应用程序的app_ID和MASTER_键,我们将在后面的步骤中进行设置
  • 单击“免费部署”

  • 如果出现以下框,请输入您的信用卡信息以验证您的帐户别担心,除非您稍后升级您的帐户,否则不会向您收取费用。这只是Heroku为防止滥用而采取的安全措施

  • Heroku将创建你的应用程序。在后台,它还将为您创建一个.git repo,克隆的内容,创建一个MongoDB数据库,并配置Heroku应用程序使用该数据库
  • 当应用程序创建后,您将被带到它的Heroku仪表板,或者您可以通过登录、单击“个人应用程序”然后单击解析服务器的名称到达
  • 在应用程序的仪表板上,单击“设置”,然后单击“显示配置变量”

  • 填写应用程序的应用程序ID和主密钥。如果你现在在Parse.com上有一个应用程序,你可以使用它使用的相同密钥。您可以在
    https://www.parse.com/apps/. 您可以为您计划使用的任何sdk添加新键,我在这里为javascript sdk添加一个

  • 请注意MONGOLAB_URI的值,如果您想将现有的解析数据迁移到新的数据库中,您将需要这个值
  • 向下滚动并记下应用程序的Git Url和Heroku域,稍后您将需要这些

  • 安装,这是一个用于管理Heroku应用程序的命令行界面工具

  • 打开终端提示符,输入
    $heroku login
    ,输入heroku电子邮件和密码

  • 输入
    $heroku git:clone-a
    (其中
    是您的heroku应用程序的名称)以制作服务器代码repo的本地副本,您还可以使用前面看到的git url。克隆回购时,您将看到消息“警告:您似乎克隆了一个空存储库。”。将创建应用程序文件夹,但它只包含标准git文件,不包含解析服务器。来解决这个问题。转到,下载回购协议的zip文件。提取文件夹,将所有文件和文件夹从parse server example主文件夹拖动到应用程序文件夹中

  • 回到终端,输入
    $cd
    进入回购

  • 启用CORS(以便您可以使用来自其他域的API)
  • 在硬盘上,找到并打开我们刚刚创建的回购协议的本地副本
  • 在文件夹中,打开
    package.json
    并将
    “cors”:“*”
    添加到
    依赖项中,如下所示:
  • 返回终端窗口,确保您仍在我们克隆的repo文件夹中,并输入以下内容以将更改推送到Heroku:

  • 测试您的新解析服务器
  • 去这个
  • 将小提琴中的
    更改为应用程序的相应值,然后单击“运行”
  • Parse.initialize(“”,”);
    Parse.serverURL=https://.herokuapp.com/Parse'
    
  • 您应该会收到以下警报,告知您的新解析服务器工作正常
  • 注: 如果将JSFIDLE工具用于多个解析服务器实例,则可能会出现错误“会话令牌无效”。如果发生这种情况,请打开dev控制台,并从本地存储中删除所有“parse”键,然后,它应该可以工作:


    从Parse迁移现有数据 在迁移生产应用程序之前,您应该对测试应用程序至少执行一次此操作。此外,旧应用程序中的遗留
    文件可能尚未传输,请参阅

  • 在我们迁移之前,如果您的新MongoDB中有数据,迁移将失败。如果您刚刚测试了服务器并创建了一个对象,请转到
    https://dashboard.heroku.com/apps//resources
    ,单击图标旁边的“MongoLab”,然后在下一页上单击“删除所有收藏”
  • 转到
    https://dashboard.parse.com/apps/


  • 迁移完成后,单击“Finalize”,然后在弹出窗口中单击“OK”,迁移完成后,所有数据都将保存在新的MongoDB数据库中

  • 现在,您的分析仪表板将继续显示您现在位于新数据库中的数据。要测试所有内容,请返回我们以前使用的测试JSFIDLE并再次运行它。现在,转到Parse仪表板,您应该会看到新添加的类和行注意当我使用新的解析仪表板时,我可以看到行数,但行区域都是空白的。我回到了旧的分析仪表板,可以看到一切都很好。
      "dependencies": {
        "express": "~4.2.x",
        "kerberos": "~0.0.x",
        "parse": "~1.6.12",
        "parse-server": "~2.0",    // <= don't forget this comma
        "cors": "*"                // add this line
      }
    
    var express = require('express');  // find this line in the file
    var cors = require('cors') // add this line below it
    
    //....
    
    
    //var databaseUri = process.env.DATABASE_URI || process.env.MONGOLAB_URI // old name, you may need to change this for new deployments
    var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI  // changed to MONGODB_URI in Heroku!
    
    //....
    
    var app = express();  // find this line in the file
    app.use(cors()); // add this line below it
    
    //Add declarations for any keys you plan to use as shown below
    var api = new ParseServer({
      databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
      cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
      appId: process.env.APP_ID || 'myAppId',
      masterKey: process.env.MASTER_KEY || '',
      serverURL: process.env.SERVER_URL || 'http://localhost:1337',
      javascriptKey: process.env.JAVASCRIPT_KEY || '',  //** add this line no need to set values, they will be overwritten by heroku config vars
      restAPIKey: process.env.REST_API_KEY || '', //** add this line
      dotNetKey: process.env.DOT_NET_KEY || '', //** add this line
      clientKey: process.env.CLIENT_KEY || '', //** add this line
    });
    
    $ git add .
    $ git commit -am "make it better"
    $ git push heroku master
    
    Parse.initialize('<MY_APP_ID>', '<MY_JS_KEY>');
    Parse.serverURL = 'https://<MY_HEROKU_APP_NAME>.herokuapp.com/Parse'