typescript 请求的资源-ion 2应用程序上不存在“Access-Control-Allow-Origin”标头

fae0ux8s  于 2023-02-05  发布在  TypeScript
关注(0)|答案(3)|浏览(138)

当我尝试使用POST请求访问本地服务器时,收到以下错误:
XMLHttpRequest无法加载http://127.0.0.1:8000/api/v1/users/login。请求的资源上不存在"Access-Control-Allow-Origin"标头。因此不允许访问源"http://localhost:8100"。
我的服务器允许CORS,因为我已经通过用 Postman 发送请求来测试它,它工作正常。
下面是我的前端代码:

private headers = new Headers({
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE',
    'Access-Control-Allow-Headers': 'X-Requested-With,content-type',
    'Access-Control-Allow-Credentials': true 
});

postLogin(data) {
    console.log(data);
    return new Promise((resolve) => {
        this.http.post(this.api + "users/login", data, {headers: this.headers})
            .map(res => res.json())
            .subscribe(answer => {
                 this.loggedIn = true;
                 this.token = answer.token;
                 resolve(answer);
            });
    });
 }

PS:我没有在GET请求中得到这个错误。
我试着放一个代理,它没有改变任何东西:(
这是我的ionic.config.json

{
  "name": "hardShop",
  "app_id": "",
  "v2": true,
  "typescript": true,
  "proxies": [
      {
          "path": "/api",
          "proxyUrl": "http://127.0.0.1:8000"
      }
  ]
}
zfycwa2u

zfycwa2u1#

请在浏览器中使用this plugin重试。
它允许 AJAX 从任何来源请求任何地址,绕过http/https安全要求或浏览器设置的其他限制(称为CORS),实际上,它在收到的响应中注入'Access-Control-Allow-Origin': '*'头,然后 * 才 * 将其传递给运行在浏览器中的应用。
请记住,这是一个权宜之计,主要用于开发。您的 * 服务器 * 响应必须实际包含'Access-Control-Allow-Origin': '*'报头,最好使用比*更具体的值。
你现在所做的实际上没有任何效果,因为 * 你作为客户端 * 向服务器 * 发送了一个带有该报头的请求 *,服务器立即忽略了它。重要的是服务器 * 在对客户端 * 的响应中有这个报头。
据我所知, Postman 不使用CORS,所以也许这就是它不受影响的原因。

ha5z0ras

ha5z0ras2#

当您将Httphttps(即安全层)连接时,会显示此错误。当我调用位于带有Http的安全服务器中的rest服务到在localhost中运行的应用程序时,也会出现相同的错误。
要允许这样做,您需要在浏览器中安装一个插件,以传递此锁。
如果您使用的是chrome,安装CORS插件的chrome和它会工作。

bvjxkvbb

bvjxkvbb3#

这个问题的一个原因可能是(个人经验):可能您为database部署了错误的connectionstring
我使用了以下两个数据库连接,一个用于本地存储,另一个用于服务器存储

const localhost = await mongoose.connect('mongodb://localhost:27017/categories');
const serverhost = await mongoose.connect('mongodb://usename:password@ds015126.mlab.com:12345/myapp');

有些人可能使用两个connectionStrings,就像我和deploylocalhost database-connection而不是真实的的server database-connection,然后试图通过postmanclient-application访问database,然后面临这样的问题。
请确保您有正确的deployed

相关问题