2014-09-24 2 views
1

у меня есть: я использовал модуль запроса Node.js, чтобы получить токен авторизации:Замена узла request.post с запросом-обещание

Рабочий код бесперспективным

var request = require('request'); 
var querystring = require('querystring'); 

var requestOpts = querystring.stringify({ 
    client_id: 'Subtitles', 
    client_secret: 'X............................s=', 
    scope: 'http://api.microsofttranslator.com', 
    grant_type: 'client_credentials' 
}); 

request.post({ 
    encoding: 'utf8', 
    url: "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13", 
    body: requestOpts 
}, function(err, res, body) { //CALLBACK FUNCTION 
    var token = JSON.parse(body).access_token; 
    amkeAsyncCall(token); 
}); 

Я хочу : Это займет некоторое время, чтобы получить этот токен. В свою очередь мне нужен makeAsyncCall из callback-функции getToken. Поэтому я решил использовать request-promise от here.

Проблема: запрос-обещание кажется не работает для меня вообще.

То же самое (не работает) код с обещанием:

var rp = require('request-promise'); 
    var querystring = require('querystring'); 

    var requestOpts = { 
     encoding: 'utf8', 
     uri: 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13', 
     method: 'POST', 
     body: querystring.stringify({ 
      client_id: 'Subtitles', 
      client_secret: 'Xv2Oae6Vki4CnYcSF1SxSSBtO1x4rX47zhLUE/OqVds=', 
      scope: 'http://api.microsofttranslator.com', 
      grant_type: 'client_credentials' 
     }) 
    }; 

    rp(requestOpts) 
    .then(function() { 
     console.log(console.dir); 
    }) 
    .catch(function() { 
     console.log(console.dir); 
    }); 
+2

Любая библиотека обещаний будет делать, для этого вам не нужен целый пакет. Просто используйте 'bluebird' и выполните' Promise.promisify (require («request»)), и он будет работать –

ответ

0

Я использую пакет Node.js "unirest".

var unirest = require('unirest'); 
var dataObj = {}; 
var Request = unirest.post('http://127.0.0.1:' + port + '/test/4711DE/de'); 
Request.headers({ 'Accept': 'application/json' })      
.type('json') 
.send(JSON.stringify(dataObj)) 
.auth({ 
    user: 'USERNAME', 
    pass: 'PASSWORD', 
    sendImmediately: true 
}) 
.end(function (response) { 
    assert.equal(200, response.statusCode); 
    // ... 
}); 
1

Я тестировал код с последней версией Request-Promise (0.3.1) и она отлично работает.

Только последняя часть входа в консоль была неправильной. Использование:

rp(requestOpts) 
    .then(function(body) { 
     console.dir(body); 
    }) 
    .catch(function(reason) { 
     console.dir(reason); 
    }); 
Смежные вопросы