簡體   English   中英

設置了CORS標頭,但仍然收到錯誤

[英]CORS headers set but still get an error

嗨,大家好,我正在嘗試向我的流星應用發送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)

現在,當我從Chrome控制台執行ajax請求時,出現此錯誤

XMLHttpRequest cannot load https://b2c.meteorapp.com/handlePopups. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://stackoverflow.com' is therefore not allowed access.

另外,我的服務器控制台中未記錄任何內容。 但是我沒有設置標題嗎? 我做錯了嗎? 還要注意,當我使用Hurl.it之類的測試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 cannot load https://b2c-hayk94.c9users.io/handlePopups. Response for preflight is invalid (redirect)還有另一個錯誤, XMLHttpRequest cannot load https://b2c-hayk94.c9users.io/handlePopups. Response for preflight is invalid (redirect) XMLHttpRequest cannot load https://b2c-hayk94.c9users.io/handlePopups. Response for preflight is invalid (redirect)您知道此錯誤是關於什么的嗎?

更新

顯然這是一個c9問題。 部署到銀河系之后,這兩個答案都像靈符一樣起作用,但是我接受Alianp的回答,因為那樣一來,我只為特定路線設置標頭。

嘗試這個

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

您需要啟用OPTIONS方法進行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函數中並進行檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM