Express.js模块& Parse.com Cloud Code

时间:2014-06-20 00:02:48

标签: express parse-platform quickblox

我正在使用Parse.com和express.js。我是webdev的新手,而Parse.com让事情变得复杂。

我想使用外部SDK - QuickBlox。这是SDK的结构:

enter image description here

当我quickblox.js并将其包含在<script>标记中,然后调用QB.init()时,SKD正常工作。

但是,我想将所有这些功能放在我的一条路线中。问题是,我不能npm install,因为我正在使用Parse的云服务器。

所以我将quickblox.js复制到云文件夹中,并尝试将其作为模块加载:

var QB = require('cloud/libs/quickblox.js');

我用async.js做了同样的事情并且它有效。但是,它不适用于Quickblox。当我打电话给QB.init()时,我得到了:

TypeError: Object [object Object] has no method 'init'

事情是,我是这个环境的新手,所以我不知道这是不是基本的我做错了,或者这是特别的情况。


修改

我调查了quickblox.js并发现了这些可能相关的行:

// Creating a window scoped QB instance
if (typeof window !== 'undefined' && typeof window.QB === 'undefined') {
  window.QB = new QuickBlox();
}

// Browserify exports
module.exports = (typeof window === 'undefined') ? new QuickBlox() : QuickBlox;

所以,既然我没有运行这个客户端,那么就没有window对象,window.QB = new QuickBlox();永远不会被运行,对吧?这是对.js文件中QB的唯一引用。

由于(typeof window === 'undefined')应为true,因此module.exports设置为new QuickBlox() ...但是我引用了什么对象来转到init()

以下是定义init()的地方:

  // Actual QuickBlox API starts here
  function QuickBlox() {}

  QuickBlox.prototype.init = function(appId, authKey, authSecret, debug) {
  this.service = new Proxy();
  this.auth = new Auth(this.service);
  this.users = new Users(this.service);
  this.content = new Content(this.service);
  this.location = new Location(this.service);
  this.messages = new Messages(this.service);
  this.data = new Data(this.service);

  // Initialization by outside token
  if (typeof appId === 'string' && !authKey && !authSecret) {
    this.service.setSession({ token: appId });
    appId = '';
  }

  config.creds.appId = appId;
  config.creds.authKey = authKey;
  config.creds.authSecret = authSecret;
  if (debug) {
    config.debug = debug;
    console.log('QuickBlox.init', this);
  }
};

And the actual quickblox.js file on github.

1 个答案:

答案 0 :(得分:1)

从简要介绍一下QuickBlox github,看起来你会把&#34; js&#34;的内容放进去。您的&#34;云&#34;中的文件夹文件夹或&#34; QuickBlox&#34;子文件夹,除非您想从客户端浏览器访问QuickBlox,否则您不会使用浏览器版本。

假设你把所有东西放在&#34; js&#34;名为&#34; QuickBlox&#34;的子文件夹内的文件夹然后,您可以通过添加requires(..)语句(例如

)在云函数中引用它
var QB = requires('QuickBlox/quickblox');

这将加载所有模块并将它们附加到QB变量,因此在您的Cloud Functions中,您可以执行以下操作(从其网站上的示例中提取):

QB.init(appId, authKey, authSecret);

// create an API session (user is not authenticated)
QB.createSession(function(err, result) {
  if (err) { 
    console.log('Something went wrong: ' + err);
  } else {
    console.log('Session created with id ' + result.id);
  }
});

// list the users currently enrolled
QB.users.listUsers(function(err, result) {
  for (var i=0; i < result.items.length; i++) {
    console.log('User ' + result.items[i].login + ' is registered');
  }
});