皆さん、私の流星アプリにajaxリクエストを送信して何らかの方法で処理しようとしています。ここに私のコードです。今、私はクロームコンソールからAJAX要求を行うとき、私はこのエラーにCORSヘッダーは設定されていますが、まだエラーが発生します
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.
を得る。また、何も私のサーバーのコンソールにログインしていない
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)
。 しかし、私はヘッダーを設定していませんでしたか?私はそれを間違っているのですか? はまた、私は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
がある示し、それが必要として私のサーバーのコンソールがすべてをログに記録し、応答を取得します注意してください。
私のヘッダーがすべて設定されている場合、ここで問題は何ですか?
UPDATEエラーをmutdmourとAlianpする
感謝がなくなって、しかしまた別のエラーXMLHttpRequest cannot load https://b2c-hayk94.c9users.io/handlePopups. Response for preflight is invalid (redirect)
がありますが、このエラーが何であるかを知っていますか?
UPDATE
どうやらそれはC9の問題でした。 galaxyにデプロイした後、両方の答えが魅力的に機能しますが、私はAlianpのものを受け入れます。その方法で、特定のルートのみのヘッダーを設定するだけです。
飛行前のOPTIONSリクエストをhurl.itでテストしていますか?または、後続のGETまたはPOSTリクエストのみですか? – Quentin
@Quentin私はHurl.itがAjaxリクエストを送信していないと考えています。したがって、プリフライトはありません。しかし、なぜプリフライト要求が私の応答で設定したヘッダーを取得しないのですか? –
私は最近同様の問題を抱えていますが、この質問は役に立ちますか? http://stackoverflow.com/questions/35588699/response-to-preflight-request-doesnt-pass-access-control-check-angularjs私はブラウザの拡張機能が私のコードを動作させることができました。サーバーを構成することです。 –