我正在使用一个加载内置https包的node.js脚本。使用它时我收到错误:
XMLHttpRequest cannot load [constructed-api-url]. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:3000' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.
我正在使用node.js 4.4.3,其https api docs并没有真正提及有关withCredentials的任何内容。
正在使用的脚本是this one。
无论如何使用node.js https将xhr调用withCredentials设置为false?
我正在寻找类似于这个jquery ajax调用的东西(只关注xhr字段):
$.ajax({
type: 'POST', async:true,
url: 'https://someapp.constructed.url/token',
dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
xhrFields: {
withCredentials: true
},
headers: {
'Authorization': 'Basic ' + appInfo
},
success: function (result) {
var token = result.access_token;
//…
},
error: function (req, status, error) {
if (typeof(req) != 'undefined') {
var msg = status || req.responseJSON.error;
//…
}
}
});
还有另一个非常相似的例子,但这与请求包有关,我不想将其包含在依赖项中。此外,我用过的脚本已经在使用https。
答案 0 :(得分:0)
所以答案一直都在那里,毕竟:
经过一些研究,发现节点的https包使用与http几乎相同的选项,包括withCredentials
选项(未在节点的http / https中记录,但是xhr文档的一部分)。这是在url
选项中的选项对象中包含withCredentials
选项,然后将options
对象作为https.get
的参数传递的问题。
构造的代码或多或少如下(关注options
变量):
var options = {
url: 'https://my.domain.com/api/endpoint',
withCredentials: false
}
var querystring = '?key=' + [_my_api_key];
var param1 = '&' + [paramKey] + '=' + [paramValue];
var datos;
options.url += querystring;
options.url += param1;
https.get(options, function (res) {
res.on('data', function (data) {
datos += data;
});
res.on('end', function () {
try {
var data = JSON.parse(datos);
} catch (e) {
console.error('Unable to parse response as JSON', e);
}
});
}).on('error', function (e) {
console.error('An error occurred with the request:', e.message);
callback(e.message);
});