我正在使用Parse.com和express.js。我是webdev的新手,而Parse.com让事情变得复杂。
我想使用外部SDK - QuickBlox。这是SDK的结构:
当我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);
}
};
答案 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');
}
});