Javascript Node.js服务器发出的跨源请求被阻止
My Node.js服务器代码正在AWS实例上运行。看起来是这样的: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-
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工作,通常最好始终支持它。我不确定如何添加选项处理。我正在使用的代码是一个现有的节点包。那太棒了!谢谢