1
我的Node.js服務器代碼正在AWS實例上運行。它看起來像這樣:Node.js服務器給出的跨域請求被阻止
var express = require('express');
var http = require('http');
var bodyParser = require('body-parser');
var logger = require('morgan');
var cors = require('cors');
var SuperLogin = require('superlogin');
var app = express();
app.set('port', process.env.PORT || 3000);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());
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");
next();
});
var config = {
dbServer: {
protocol: 'http://',
host: 'localhost:5984',
user: '',
password: '',
userDB: 'sl-users',
couchAuthDB: '_users'
},
mailer: {
fromEmail: '[email protected]',
options: {
service: 'Gmail',
auth: {
user: '[email protected]',
pass: 'userpass'
}
}
},
security: {
maxFailedLogins: 3,
lockoutTime: 600,
tokenLife: 86400,
loginOnRegistration: true,
},
userDBs: {
defaultDBs: {
private: ['supertest']
}
},
providers: {
local: true
}
}
// Initialize SuperLogin
var superlogin = new SuperLogin(config);
// Mount SuperLogin's routes to our app
app.use('/auth', superlogin.router);
app.listen(app.get('port'));
console.log("App listening on " + app.get('port'));
我使用的離子2應用程序,使PUT調用Node.js的服務器上的端口3000上運行。當在瀏覽器上我的筆記本電腦運行App (使用ionic serve
)認沽期權給予了CORS錯誤:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading
the remote resource at http://ec2-xx-xxx-xx-4xx.eu-central-1.compute.amazonaws.com/auth/login.
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
至於我可以告訴服務器代碼設置爲允許所有的起源,但我仍然得到這個錯誤。
你嘗試添加'OPTIONS'訪問控制允許的方法?查看https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests –
使用PUT將觸發瀏覽器使用OPTIONS請求預檢PUT請求。因此,除了PUT請求之外,還必須在服務器中支持OPTIONS請求,並在獲得OPTIONS請求時返回適當的信息。注意:請求中的某些其他條件也可以使用OPTIONS觸發預檢,因此如果要CORS工作,始終支持它通常是個好主意。 – jfriend00
我不知道如何添加選項的處理。我正在使用的代碼是現有的節點包。 –