我试图允许从任何地方访问。
我尝试过使用app中间件:
app.use(function (req, res, next) {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader('Access-Control-Allow-Methods', '*');
res.setHeader("Access-Control-Allow-Headers", "*");
next();
});
我尝试过在路线中使用它:
app.post('/login',function(req,res){
var login = req.body;
var sess = req.session;
if (!login.email && !login.pwd){
return res.status(401);
}
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Headers", '*');
.... more code here
两者都不起作用。我一直收到错误:“对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头。”
在服务器的下方,我们对另一条路线使用类似的代码:
app.post('/questar',function(req,res){
//allow xhr post from retireup domains
var cors = {
origin= "https://www.website.com";
};
res.header("Access-Control-Allow-Origin", cors.origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.type('application/json');
我无法区分代码,但只有一组有效。有什么想法吗?这似乎是一个不应该如此复杂的问题。感谢
答案 0 :(得分:4)
在路线之前配置CORS内容,而不在其中。
在这里,像这样(来自enable-cors.org):
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.get('/', function(req, res, next) {
// Handle the get for this route
});
app.post('/', function(req, res, next) {
// Handle the post for this route
});
我总是在我的Express + Angular应用程序中将它配置为这样,它运行得很好。
希望它有所帮助。
答案 1 :(得分:3)
MDN 对服务器应如何响应Preflight Request的解释非常简短。
您可以通过处理HTTP OPTIONS方法来处理CORS预检请求(就像处理GET和POST方法一样)在处理同一路径上的其他请求方法之前:
app.options('/login', ...);
app.get('/login'. ...);
app.post('/login'. ...);
在您的情况下,它可能就像将app.use()
调用更改为app.options()
一样简单,将路由作为第一个参数传递,设置相应的标题,然后结束响应:
app.options('/login', function (req, res) {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader('Access-Control-Allow-Methods', '*');
res.setHeader("Access-Control-Allow-Headers", "*");
res.end();
});
app.post('/login', function (req, res) {
...
});
答案 2 :(得分:1)
按照其他人的回答,这对我有用:
mockery
答案 3 :(得分:1)
首先安装,来自npm的“cors”包:npm i -S cors
然后在您的快速服务器中启用它。
var express = require('express'),
cors = require('cors');
const app = express();
app.use(cors());
...
答案 4 :(得分:0)
应用“ cors”中间件之后。您应该在“ localhost:”之前传递“ http://”。像这样通过Axios发送给url:
import testing.mysqld
from sqlalchemy import create_engine
# prevent generating brand new db every time. Speeds up tests.
MYSQLD_FACTORY = testing.mysqld.MysqldFactory(cache_initialized_db=True, port=7531)
def tearDownModule():
"""Tear down databases after test script has run.
https://docs.python.org/3/library/unittest.html#setupclass-and-teardownclass
"""
MYSQLD_FACTORY.clear_cache()
class TestWhatever(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.mysql = MYSQLD_FACTORY()
cls.db_conn = create_engine(cls.mysql.url()).connect()
def setUp(self):
self.mysql.start()
self.db_conn.execute("""CREATE TABLE `foo` (blah)""")
def tearDown(self):
self.db_conn.execute("DROP TABLE foo")
@classmethod
def tearDownClass(cls):
cls.mysql.stop() # from source code we can see this kills the pid
def test_something(self):
# something useful
答案 5 :(得分:0)
在遵循一些标准节点项目的情况下,在CORS配置下,对我而言始终有效。它需要npm软件包“ cors”。 注意:来源*表示启用对任何来源的响应并使用状态码200进行回复。如果需要将其限制为一个域,请相应地更新来源。例如:[来源:'http://exampleui.com']
var cors = require('cors');
var corsOptions = {
origin: '*',
optionsSuccessStatus: 200,
}
app.use(cors(corsOptions));
app.use(express.json())