Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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_Cors - Fatal编程技术网

Javascript Node.js服务器发出的跨源请求被阻止

Javascript Node.js服务器发出的跨源请求被阻止,javascript,node.js,cors,Javascript,Node.js,Cors,My Node.js服务器代码正在AWS实例上运行。看起来是这样的: app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Methods', 'DELETE, PUT'); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-

My Node.js服务器代码正在AWS实例上运行。看起来是这样的:

app.use(function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header('Access-Control-Allow-Methods', 'DELETE, PUT');
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   if ('OPTIONS' == req.method) {
      res.sendStatus(200);
    }
    else {
      next();
    }});
var express=require('express');
var http=require('http');
var bodyParser=require('body-parser');
var记录器=需要('morgan');
var cors=要求(“cors”);
var SuperLogin=require('SuperLogin');
var-app=express();
应用程序集('port',process.env.port | | 3000);
应用程序使用(记录器(“开发”);
use(bodyParser.json());
use(bodyParser.urlencoded({extended:false}));
应用程序使用(cors());
应用程序使用(功能(请求、恢复、下一步){
res.header(“访问控制允许原点”、“*”);
res.header('Access-Control-Allow-Methods','DELETE,PUT');
res.header(“访问控制允许头”、“来源、X请求、内容类型、接受”);
next();
});
变量配置={
数据库服务器:{
协议:“http://”,
主机:“localhost:5984”,
用户:“”,
密码:“”,
userDB:'sl users',
couchAuthDB:“\u用户”
},
梅勒:{
来自电子邮件:“gmail。user@gmail.com',
选项:{
服务:“Gmail”,
认证:{
用户:“gmail。user@gmail.com',
pass:'userpass'
}
}
},
安全:{
maxFailedLogins:3,
禁闭时间:600,
平均寿命:86400,
登录未注册:正确,
},
用户数据库:{
defaultDBs:{
私人:[“超级测试”]
}
},
提供者:{
当地人:是的
}
}
//初始化超级登录
var superlogin=新的superlogin(配置);
//将SuperLogin的路由装载到我们的应用程序
app.use('/auth',superlogin.router);
app.listen(app.get('port'));

log(“应用监听”+App.get('port'))这是因为预飞行被触发,这意味着选项请求将到达您的服务器。这一点在第三章中得到了很好的解释 正如@johannes merz在对你的问题的评论中指出的那样

您可以通过以下方式指示服务器接受它:

app.use(function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header('Access-Control-Allow-Methods', 'DELETE, PUT');
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   if ('OPTIONS' == req.method) {
      res.sendStatus(200);
    }
    else {
      next();
    }});

您是否尝试将
选项添加到访问控制允许方法中?查看使用PUT将触发浏览器以选项请求预发PUT请求。因此,除了PUT请求之外,您还必须在服务器中支持OPTIONS请求,并在收到OPTIONS请求时返回相应的信息。注意:请求中的某些其他条件也会触发带有选项的预飞行,因此如果希望CORS工作,通常最好始终支持它。我不确定如何添加选项处理。我正在使用的代码是一个现有的节点包。那太棒了!谢谢