esn't pass access control check: Redirect is not allowed for a preflight request.
时间: 2023-10-27 21:23:09 浏览: 41
这个问题通常是由于浏览器的跨域请求安全策略导致的。在进行跨域请求时,浏览器会先发送一个 OPTIONS 请求,获取服务器是否允许该跨域请求。如果服务器没有正确处理这个 OPTIONS 请求,就会出现上述错误。
解决这个问题的方法是在服务器端进行相应的配置,允许跨域请求。具体的方法可以参考一些跨域请求的解决方案,例如使用 CORS(跨域资源共享)等技术。
相关问题
esn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这个错误信息是跨域问题导致的。当你在一个网站上请求另一个网站的资源时,浏览器会根据同源策略来判断是否允许这个请求。如果请求的资源与当前网页的协议、域名或端口不同,就会触发跨域问题。而这个错误提示就是因为请求的资源没有设置Access-Control-Allow-Origin头部信息,导致浏览器拒绝了这个请求。解决这个问题的方法有两种,一种是在后端接口controller中添加@CrossOrigin注解,另一种是使用网关来解决。同时,还需要仔细检查前端连接拼接是否正确,需要调用的方法名是否与后端中一致。
你现在是一个 Clean Code 专家,我有以下的程式码,请用更干净简洁的方式改写,让我的同事们可以更容易维护程式码。另外,也解释为什么你要这样重构,让我能把重构的方式的说明加到 Pull Request 当中。cur.execute("ROLLBACK;") cur.execute("BEGIN;") cur.execute(f"DELETE FROM public.engineinfo WHERE esn={i};") conn.commit() cur.execute("ROLLBACK;") cur.execute("BEGIN;") cur.execute(f"INSERT INTO engineinfo (esn, info) VALUES ({i}, %s::json)", (json.dumps(data),)) conn.commit()
以下是我建议的重构方式:
```
with conn.cursor() as cur:
try:
cur.execute(f"DELETE FROM public.engineinfo WHERE esn={i};")
cur.execute(f"INSERT INTO engineinfo (esn, info) VALUES ({i}, %s::json)", (json.dumps(data),))
conn.commit()
except:
conn.rollback()
```
这里主要做了两个改进:
1. 使用 try/except 块来处理异常和回滚事务,避免了多次写相同的代码。
2. 将所有的 SQL 操作放在一个 with 块中,这样可以自动释放资源,并且提高了代码的可读性。
同时,我还将 DELETE 和 INSERT 操作合并成一个块,这样可以减少对数据库的访问次数。