我有: 我使用Node.js请求模块来获取授权令牌:
没有承诺的工作代码
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);
});
我想:
获得该令牌需要一些时间。反过来,我需要来自getToken回调的makeAsyncCall
。所以我决定使用here中的request-promise
。
问题:请求承诺似乎根本不适用于我。
具有承诺的相同(不可用)代码:
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);
});
答案 0 :(得分:1)
我使用最新版本的Request-Promise(0.3.1)测试了您的代码,它运行正常。
登录控制台的最后一部分是不正确的。使用:
rp(requestOpts)
.then(function(body) {
console.dir(body);
})
.catch(function(reason) {
console.dir(reason);
});
答案 1 :(得分: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);
// ...
});
答案 2 :(得分:0)
我有同样的问题,我刚刚添加了此属性
headers = { 'Content-Type': 'application/json' };
var requestOpts = {
encoding: 'utf8',
uri: 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13',
method: 'POST',
headers = { 'Content-Type': 'application/json' };
body: JSON.stringify({
client_id: 'Subtitles',
client_secret: 'Xv2Oae6Vki4CnYcSF1SxSSBtO1x4rX47zhLUE/OqVds=',
scope: 'http://api.microsofttranslator.com',
grant_type: 'client_credentials'
})
};
答案 3 :(得分:0)
您可以将json
中的requestOpts
属性设置为true
,对我来说有效。
var rp = require('request-promise');
var querystring = require('querystring');
var requestOpts = {
encoding: 'utf8',
uri: 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13',
method: 'POST',
json: true,
body: {
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);
});