diff --git a/README.md b/README.md index b73a135..8fb4427 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,16 @@ -nodejs-vksdk +promise-vksdk ============ Small SDK for vk.com API. +This is form of vksdk, with Promise + # Installation - npm install vksdk + npm install promise-vksdk # Example ```js // Setup -var VK = require('vksdk'); +var VK = require('promise-vksdk'); var vk = new VK({ 'appId' : 2807970, 'appSecret' : 'L14ZKpgQPalJdumI6vFK', @@ -29,10 +31,15 @@ vk.on('serverTokenReady', function(_o) { vk.setSecureRequests(true); // Request server API method -vk.request('secure.getSMSHistory', {}, function(_dd) { - console.log(_dd); +let vksdk = require('promise-vksdk'); +const vk = new vksdk({ + 'appId' : 2807970, + 'appSecret' : 'L14ZKpgQPalJdumI6vFK', + 'lang' : 'ru' }); +vk.request("users.get", {user_id:1}).then(o=>console.log(o)); + /** * Request client methods */ @@ -40,14 +47,12 @@ vk.request('secure.getSMSHistory', {}, function(_dd) { vk.setToken(access_token); // Request 'users.get' method -vk.request('users.get', {'user_id' : 1}, function(_o) { - console.log(_o); -}); +vk.request("users.get", {user_id:1}).then(o=>console.log(o)); ``` # Setup ```js -var VK = require('vksdk'); +var VK = require('promise-vksdk'); var vk = new VK({ 'appId' : [Your application ID here], @@ -84,9 +89,9 @@ For vk.com API requests you have to use method *request(_method, _requestParams, * **[string] _method** — name of vk.com API method, * **[mixed] _requestParams** - object with values of params for api method. This param is not required. You also can pass empty object *{}* * **[mixed] _response** — special response handler (not required), function or event name. - Request method gets data from API and returns result. There are 3 ways to get data from API + ## Callback ```js vk.setSecureRequests(false); @@ -118,6 +123,7 @@ vk.on('myCustomEvent', function(_o) { }); ``` + # Server access token For some api methods you need server access token @@ -131,7 +137,12 @@ vk.on('serverTokenReady', function(_o) { }); ``` -You also can get tokeb with callback or custom event +You also can get token with callback or custom event +#Errors: + +```js +vk.request("users.get", {user_id:1}).then(o=>console.log(o)).catch(err=>console.error(err)); +``` # HTTP errors SDK emits 'http-error' event in case of http errors. diff --git a/package.json b/package.json index 80ffcc7..399058e 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "vksdk", - "description": "SDK for API of vk.com", + "name": "promise-vksdk", + "description": "SDK for API of vk.com with Promise", "version": "5.3.2", - "homepage": "https://github.com/57uff3r/nodejs-vksdk", + "homepage": "https://github.com/DuckerMan/promise-vksdk", "email": "57uff3r@gmail.com", "license": "BSD-3-Clause", "main": "sdk.js", @@ -11,16 +11,16 @@ }, "repository": { "type": "git", - "url": "https://github.com/57uff3r/nodejs-vksdk.git" + "url": "https://github.com/DuckerMan/promise-vksdk.git" }, "keywords": [ "vk", "vkontakte", "sdk" ], - "author": "Andrey Korchak <57uff3r@gmail.com> (http://57uff3r.ru/)", + "author": "DuckerMan | Andrey Korchak", "bugs": { - "url": "https://github.com/57uff3r/nodejs-vksdk/issues" + "url": "https://github.com/DuckerMan/promise-vksdk/issues" }, "devDependencies": { "chai": "^3.4.0", diff --git a/sdk.js b/sdk.js index 1d0be59..879eb14 100644 --- a/sdk.js +++ b/sdk.js @@ -230,41 +230,42 @@ VK.prototype.oldRequest = function(_method, _requestParams, _response) { * Request API method * @param {string} _method * @param {mixed} _params - * @param {mixed} _response * @returns {mixed} * * @see https://vk.com/pages?oid=-17680044&p=Application_Interaction_with_API */ VK.prototype.request = function(_method, _requestParams, _response) { - var responseType = 'event'; + let thats = this; + var self = this; + return new Promise(function(resolve,reject){ + var responseType = 'event'; - if ( typeof(_response) === 'function') { - responseType = 'callback'; - } + if ( typeof(_response) === 'function') { + responseType = 'callback'; + } - var self = this; var params = { - 'lang' : this.options.lang, - 'v' : this.options.version, - 'https' : (this.options.https) ? 1 : 0 + 'lang' : thats.options.lang, + 'v' : thats.options.version, + 'https' : (thats.options.https) ? 1 : 0 }; - if (this.isEmpty(_requestParams) === false) { + if (thats.isEmpty(_requestParams) === false) { for (var i in _requestParams) { params[i] = _requestParams[i]; } } - var requestString = this.buildQuery(params); + var requestString = thats.buildQuery(params); - if (this.options.secure) { - if (this.token) { - requestString = requestString + '&access_token=' + this.token; + if (thats.options.secure) { + if (thats.token) { + requestString = requestString + '&access_token=' + thats.token; } - if (this.options.appSecret) { - requestString = requestString + '&client_secret=' + this.options.appSecret; + if (thats.options.appSecret) { + requestString = requestString + '&client_secret=' + thats.options.appSecret; } } @@ -279,7 +280,7 @@ VK.prototype.request = function(_method, _requestParams, _response) { } }; - this.waitForNextRequest(function () { + thats.waitForNextRequest(function () { self.requestingNow = true; var post_req = https.request(options, function(res) { var apiResponse = ""; @@ -295,26 +296,33 @@ VK.prototype.request = function(_method, _requestParams, _response) { try { var o = JSON.parse(apiResponse); } catch(e) { - return self.emit('parse-error', apiResponse); + self.emit('parse-error', apiResponse); + reject('parse-error', apiResponse); } if (responseType === 'callback' && typeof _response === 'function') { _response(o); + resolve(o) } else { if (responseType === 'event' && !!_response) { return self.emit(_response, o); } return self.emit('done:' + _method, o); } + + resolve(o); }); }).on('error', function (e) { self.requestingNow = false; self.emit('http-error', e); + reject('http-error', e); }); post_req.write(requestString); post_req.end(); }) + }); + }; /**