2014-06-20 79 views
2

我正在使用Parse.com和express.js。我對webdev很陌生,Parse.com使事情變得複雜。Express.js模塊&Parse.com Cloud代碼

我想使用外部SDK - QuickBlox。下面是SDK的結構:

enter image description here

當我拿quickblox.js並將其包含在一個<script>標籤,然後調用QB.init()那麼SKD工作正常。

但是,我想把所有這些功能放在我的路線之一。問題是,因爲我使用Parse的雲服務器,所以我不能npm install

所以我複製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')應該是真實的,那麼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.

+0

你必須學習如何添加quickblox服務器端庫,我也有同樣的問題。並試圖找到方法。 – AmirModiri

+0

你可以用quickblox api來做到這一點。但在這種情況下,您需要添加一些客戶端API請求。 – AmirModiri

回答

1

從在QuickBlox github上簡單的介紹一下,它似乎你把「JS」的內容,無論是在文件夾中的「雲「文件夾或」QuickBlox「子文件夾,除非您想從客戶端瀏覽器訪問QuickBlox,否則不會使用browserified版本。

假設您將所有內容放在名爲「QuickBlox」的子文件夾內的「js」文件夾中,您將通過添加requires(..)語句(例如,

var QB = requires('QuickBlox/quickblox'); 

這將加載所有的模塊,並將其連接到QB變量太多,所以在你的雲功能,你就可以做這樣的事情(從樣品在其網站上拉):

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'); 
    } 
}); 
+0

因爲這種庫工作客戶端不是服務器端不工作 – AmirModiri