Javascript 已设置CORS标头,但仍收到错误

Javascript 已设置CORS标头,但仍收到错误,javascript,ajax,node.js,meteor,cors,Javascript,Ajax,Node.js,Meteor,Cors,嗨,伙计们,我正试图向我的meteor应用程序发送一个ajax请求,并以某种方式处理它。这是我的密码 import { WebApp } from 'meteor/webapp' import ConnectRoute from 'connect-route' import { Popups } from '../../imports/collections/popups/Popups' const Fiber = Npm.require('fibers') function onRoute

嗨,伙计们,我正试图向我的meteor应用程序发送一个ajax请求,并以某种方式处理它。这是我的密码

import { WebApp } from 'meteor/webapp'
import ConnectRoute from 'connect-route'
import { Popups } from '../../imports/collections/popups/Popups'

const Fiber = Npm.require('fibers')

function onRoute (req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*')
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
  let rawPostBody = ''
  let postData = {}
  req.on('data', function (chunk) {
    console.log('on data')
    rawPostBody += chunk.toString()
  })
  req.on('end', function () {
    console.log('on end')
    postData = getPostData(rawPostBody)
    console.log('postData', postData)
    console.log('postData.event', postData.event)
    console.log('postData._id', postData._id)
    Fiber(() => {
      Meteor.call('updateAnalytics', postData, (error, result) => {
        if (error) {
          console.log('updateAnalytics error', error)
        }
        if (result) {

        }
      })
      console.log('res', res)
      res.writeHead(200)
      res.end()
    }).run()
  })
}

function getPostData (rawPostBody) {
  let postData = {}
  let pairs = rawPostBody.split('&')
  for (let i = 0; i < pairs.length; i++) {
    let kv = pairs[i].split('=')
    postData[kv[0]] = decodeURIComponent((kv[1] + '').replace(/\+/g, '%20'))
  }
  return postData
}

const middleware = ConnectRoute(function (router) {
  // 2uik9 is for webhooks requests
  router.post('/handlePopups', onRoute)
})

WebApp.connectHandlers.use(middleware)
我的服务器控制台中也没有记录任何内容。 但是我没有设置标题吗?我做错了吗? 还要注意,当我使用测试http请求服务时,它会得到一个响应,其中显示有头

HEADERS

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Origin: *
Content-Length: 0
Content-Type: text/plain; charset=utf-8
Date: Tue, 14 Mar 2017 10:39:59 GMT
Set-Cookie: galaxy-sticky=ESEFdEqGgiFCeS9P9-ras9; Path=/; HttpOnly
我的服务器控制台会记录所有应该记录的内容

如果我的标题都设置好了,这里有什么问题

更新

多亏了mutdmour和Alianp,错误消失了,但是还有另一个错误
XMLHttpRequest无法加载https://b2c-hayk94.c9users.io/handlePopups. 飞行前的响应无效(重定向)
您知道这个错误是关于什么的吗

更新

显然这是c9问题。在部署到galaxy后,这两个答案都很有魅力,但我接受Alianp的答案,因为这样我只为特定路线设置标题。

试试这个

//server/main.js
WebApp.rawConnectHandlers.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", "*");
  return next();
});
试试这个

//server/main.js
WebApp.rawConnectHandlers.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", "*");
  return next();
});

您需要为CORS检查启用选项方法

router.options('/handlePopups', function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Headers', 'Origin,X-Requested-With, Content-Type, Accept');
   res.writeHead(200);
   res.end();
});

在ConnectRoute函数中添加此代码并进行检查。

您需要启用选项方法以进行CORS检查

router.options('/handlePopups', function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Headers', 'Origin,X-Requested-With, Content-Type, Accept');
   res.writeHead(200);
   res.end();
});

将此代码添加到ConnectRoute功能中并进行检查。

是否使用Hull.it测试飞行前选项请求?或者只是后续的GET或POST请求?@Quentin我认为Hull。它没有发送ajax请求,因此没有飞行前的请求。但是为什么飞行前的请求没有得到我在其响应中设置的标题呢?我最近遇到了类似的问题,这个问题有帮助吗?我发现一个浏览器扩展允许我的代码工作,对我来说一个更持久的解决方案是配置服务器。您是否正在使用Hull.it测试飞行前选项请求?或者只是后续的GET或POST请求?@Quentin我认为Hull。它没有发送ajax请求,因此没有飞行前的请求。但是为什么飞行前的请求没有得到我在其响应中设置的标题呢?我最近遇到了类似的问题,这个问题有帮助吗?我发现一个浏览器扩展允许我的代码工作,一个更持久的解决方案是配置服务器。非常感谢。这导致无法加载
XMLHttpRequesthttps://b2c-hayk94.c9users.io/handlePopups. 飞行前的响应无效(重定向)
您知道这个错误是关于什么的吗?显然这是c9的问题。上传到galaxy后,这就像一个符咒,谢谢!非常感谢你。这导致无法加载
XMLHttpRequesthttps://b2c-hayk94.c9users.io/handlePopups. 飞行前的响应无效(重定向)
您知道这个错误是关于什么的吗?显然这是c9的问题。上传到galaxy后,这就像一个符咒,谢谢!非常感谢你。这导致无法加载
XMLHttpRequesthttps://b2c-hayk94.c9users.io/handlePopups. 飞行前的响应无效(重定向)
您知道这个错误是关于什么的吗?对不起,我不知道。非常感谢。这导致无法加载
XMLHttpRequesthttps://b2c-hayk94.c9users.io/handlePopups. 飞行前的响应无效(重定向)
您知道这个错误是关于什么的吗?对不起,我不知道