Javascript NodeJS-CORS中间件`origin`未定义

Javascript NodeJS-CORS中间件`origin`未定义,javascript,node.js,cors,Javascript,Node.js,Cors,我有一个应用程序使用corsnpm包作为中间件。我把它设置成这样: if(process.env.NODE_ENV === 'production') { var whitelist = ['http://mywebsite.com', 'https://mywebsite.com'] var corsOptions = { origin: (origin, callback) => { var originIsWhitelisted =

我有一个应用程序使用
cors
npm包作为中间件。我把它设置成这样:

  if(process.env.NODE_ENV === 'production') {
    var whitelist = ['http://mywebsite.com', 'https://mywebsite.com']
    var corsOptions = {
      origin: (origin, callback) => {
          var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
          console.log('ORIGIN: ', origin);  // => undefined
          callback(originIsWhitelisted ? null : 'Bad Request', originIsWhitelisted)
      },
      credentials:true
    }
    app.use(cors(corsOptions));
  }

我的公司中的
origin
参数是
未定义的
。这是为什么?我如何修复它?

使用是一种配置中间件的方法。您必须仅在路由中应用这些选项。这是我根据文档看到的。还没有测试过。希望这对yaa有帮助

var whitelist = ['http://example1.com', 'http://example2.com']
var corsOptions = {
  origin: function (origin, callback) {
    var originIsWhitelisted = whitelist.indexOf(origin) !== -1
    callback(originIsWhitelisted ? null : 'Bad Request', originIsWhitelisted)
  }
}

app.get('/products/:id', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for a whitelisted domain.'})
})

如果您不想阻止REST工具或服务器到服务器的请求,请添加一个!原点功能中的原点检查,如下所示:

var corsOptions = {
  origin: function (origin, callback) {
    if (!origin || whitelist.indexOf(origin) !== -1) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
}

当您在进行API调用的同一来源加载页面时,就会发生这种情况。浏览器不会设置“Origin”标题,除非API调用的域与服务页面的域不同

这里将进一步解释这一点

如果您使用浏览器控制台从其他网站中进行API调用,您将看到浏览器设置了源标题,因此在express读取时不会未定义

您可以使用

if (whitelist.indexOf(origin) !== -1 || !origin) 

中间件的全部要点是将给定的操作应用于许多路由。如果需要,您当然可以在中间件级别使用CORS。或者,您可以仅将其应用于特定路线。您不必将其用于
app.get()
。它可以与app.use()一起使用。很好。因为它没有定义,如果是同一个原点,它不应该检查它,而不仅仅是一个错误的值吗<代码>原点===未定义