首页 > 解决方案 > 重定向 URL 不起作用并获得 No 'Access-Control-Allow-Origin' 标头错误

问题描述

我正在尝试从我的应用程序向 Nodejsserver 发送 Ajax 请求,但收到此错误

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我正在使用 ajax 调用向服务器(nodejs)发送请求,服务器反过来将返回 url ,在成功函数中,应该重定向服务器发送的 url。

//nodejs app.js
var express = require('express');
var app = express();
var cors = require('cors');
var link= require('./routes/link');


app.use('/quote', link);

app.use(cors());

module.exports = app;

//link.js
var express = require('express');
var app = express();
var cors = require('cors');
var router = express.Router();
router.get('/', function (req, res) {
    res.send({ redirectUrl: "https://www.google.com" });
});

module.exports=router;

//frontend
$.ajax({
      method: 'get',
      url: '/quote',
      data: {
        id: "1",
        cn: "IN",
      },
      success: function (result) {
          window.location.href = result.redirectUrl; // url got from server
      },
      error: function (request, status, error) {
        console.log(request.error);
      }
    });

标签: javascriptnode.jsajaxexpress

解决方案


您可以自定义 cors 而不是app.use(cors());这样:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Methods", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  next();
});

让我们试试。


推荐阅读