Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js跨域缺少必需的请求标头错误_Javascript_Node.js_Api_Heroku_Cors - Fatal编程技术网

Javascript node.js跨域缺少必需的请求标头错误

Javascript node.js跨域缺少必需的请求标头错误,javascript,node.js,api,heroku,cors,Javascript,Node.js,Api,Heroku,Cors,我正在使用一个基于json请求的API,除了一个请求之外,所有的请求都在工作。 默认情况下,有问题的请求不允许跨域,但使用“Cors”可以工作。 问题是,当我使用cors服务器使用javascript测试请求时,它可以工作,但当我使用node.js测试请求时,它不能工作 error: 'Missing required request header. Must specify one of: origin,x-requested-with' 不起作用的代码: //Active Match ro

我正在使用一个基于json请求的API,除了一个请求之外,所有的请求都在工作。 默认情况下,有问题的请求不允许跨域,但使用“Cors”可以工作。 问题是,当我使用cors服务器使用javascript测试请求时,它可以工作,但当我使用node.js测试请求时,它不能工作

error: 'Missing required request header. Must specify one of: origin,x-requested-with'
不起作用的代码:

//Active Match
router.get('/activematchbyid/:server/:sid', function(req, res, next) {
    var serverList = {br: 'BR1', na: 'NA1', eune: 'EUNE1', euw: 'EUW1', kr: 'KR1', lan: 'LAN1', las: 'LAS1', oce: 'OCE1', tr: 'TR1', ru: 'RU'};
    var url = 'https://cors-anywhere.herokuapp.com/https://' + req.params.server + '.api.pvp.net/observer-mode/rest/consumer/getSpectatorGameInfo/' + serverList[req.params.server] + '/' + req.params.sid + '?api_key=' + apiKey;
    console.log(url);
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    request(url, function(err, resp, body){
        String.prototype.beginsWith = function (string) {
            return(this.indexOf(string) === 0);
        }
        if (body.beginsWith('<html>') || body.beginsWith('Missing')){   
            res.send('error', 200);  
        }else{
            console.log(body);
            body = JSON.parse(body);
            res.send(body);            

        };        
    });
});

我的网站向这个url发出请求:

我找到了一个解决方案,只是在标题中添加了这个“res.header”(“访问控制允许标题”,“x-request-with,x-request-by”);,删除了其他标题,并删除了url的cors服务器。现在它可以正常工作了

工作守则:

//Active Match
router.get('/activematchbyid/:server/:sid', function(req, res, next) {
    var serverList = {br: 'BR1', na: 'NA1', eune: 'EUNE1', euw: 'EUW1', kr: 'KR1', lan: 'LAN1', las: 'LAS1', oce: 'OCE1', tr: 'TR1', ru: 'RU'};
    var url = 'https://' + req.params.server + '.api.pvp.net/observer-mode/rest/consumer/getSpectatorGameInfo/' + serverList[req.params.server] + '/' + req.params.sid + '?api_key=' + apiKey;
    res.header("Access-Control-Allow-Headers", "x-requested-with, x-requested-by");
    request(url, function(err, resp, body){
        String.prototype.beginsWith = function (string) {
            return(this.indexOf(string) === 0);
        }
        if (body.beginsWith('<html>') || body.beginsWith('Missing')){   
            res.send(resp.statusCode);  
        }else{
            body = JSON.parse(body);
            res.send(body);            
        };        
    });
});
//活动匹配
router.get('/activematchbyid/:server/:sid',函数(req,res,next){
var serverList={br:'BR1',na:'NA1',eune:'EUNE1',euw:'EUW1',kr:'KR1',lan:'LAN1',LAS1',oce:'OCE1',tr:'TR1',ru:'ru'};
var url='https://'+req.params.server+'.api.pvp.net/observer mode/rest/consumer/getcombatorgameinfo/'+serverList[req.params.server]+'/'+req.params.sid+'?api_key='+apiKey;
res.header(“访问控制允许标头”、“x请求的标头”、“x请求的标头”);
请求(url、函数(错误、响应、正文){
String.prototype.beginsWith=函数(字符串){
返回(this.indexOf(string)==0);
}
if(body.beginsWith(“”)| body.beginsWith('Missing'){
res.send(相应的状态代码);
}否则{
body=JSON.parse(body);
决议(正文);
};        
});
});

你好,请尝试使用此api

$.ajaxPrefilter(功能(选项){
if(options.crossDomain&&jQuery.support.cors){
var http=(window.location.protocol=='http:'?'http:':'https:');
options.url=http+'//cors.now.sh/'+options.url;
}
});
美元(
'http://otomoto.pl/',
功能(响应){
var$log=$(“#log”),
html=$.parseHTML(响应),
title=$(html).find(“title”).text();
控制台日志(响应);
$log.append(html);
title=$(文档).find(“title”).text();
$(“#log1”)。附加(标题);
});

内容:

您所说的“我正在使用它工作的cors服务器用javascript测试请求”是什么意思?如果您使用诸如POSTMAN之类的实用程序进行测试,那么它可能绕过了跨原点,并且似乎可以工作。看,我正在自己测试,用我的应用程序发送请求。
//Active Match
router.get('/activematchbyid/:server/:sid', function(req, res, next) {
    var serverList = {br: 'BR1', na: 'NA1', eune: 'EUNE1', euw: 'EUW1', kr: 'KR1', lan: 'LAN1', las: 'LAS1', oce: 'OCE1', tr: 'TR1', ru: 'RU'};
    var url = 'https://' + req.params.server + '.api.pvp.net/observer-mode/rest/consumer/getSpectatorGameInfo/' + serverList[req.params.server] + '/' + req.params.sid + '?api_key=' + apiKey;
    res.header("Access-Control-Allow-Headers", "x-requested-with, x-requested-by");
    request(url, function(err, resp, body){
        String.prototype.beginsWith = function (string) {
            return(this.indexOf(string) === 0);
        }
        if (body.beginsWith('<html>') || body.beginsWith('Missing')){   
            res.send(resp.statusCode);  
        }else{
            body = JSON.parse(body);
            res.send(body);            
        };        
    });
});