尊敬的各位,請考慮我剛剛開始使用Node。帶有預檢的Node.JS中的跨域POST請求?
我想從HTML表單中獲取跨域表單數據以解析Node.js服務器。我已經能夠使用簡單的POST數據執行此操作,而不需要預檢的POST請求。
我正在運行節點代碼cloud9 app servers。 我也在使用Cors模塊來處理請求。該模塊適用於簡單的請求(測試here以查看簡單的請求工作),但對於需要預檢的請求,我會從Chrome檢查器控制檯獲取此結果。
XMLHttpRequest cannot load https://nms-motaheri-1.c9.io:8080/mail.
The request was redirected to 'https://c9.io:8080/api/nc/auth?.....SHORTENED',
which is disallowed for cross-origin requests that require preflight.
這裏是我的server.js代碼:
// Define dependencies
var express = require('express')
, cors = require('cors')
, app = express()
, parse_post = require("parse-post");
// Core module config
var corsOptions = {
origin: '*',
preflightContinue: true // <- I am assuming this is correct
};
app.use(cors(corsOptions));
// Respond to option request with HTTP 200
// ?? Why is this not answering my OPTION requests sufficiently ??
app.options('*',function(req,res){
res.send(200);
});
// Give a hello world response to all GET requests
app.get('/',function(req,res){
res.sendFile(__dirname + '/index.html');
});
// Handle all POST requests to /mail
app.post('/mail', parse_post(function(req, res) {
console.log(req.body);
res.json({msg: 'This is CORS-enabled for all origins!'});
})
);
// Listen on default Cloud9 port which is 8080 in this case
app.listen(process.env.PORT, function(){
console.log('CORS-enabled web server listening on port ' + process.env.PORT);
});
爲什麼會這樣,我怎麼能圓滿回答我的職務與飛行前的OPTION的要求嗎?
謝謝,任何幫助,將不勝感激。
你能發佈來自Chrome的DevTools的「網絡」標籤的請求和響應標頭? –
嗨,我已編輯的問題添加到最後的屏幕截圖 - 謝謝。 – Mohammad
閱讀本頁面:http://blog.dzhuvinov.com/?p=979 - 具體來說:「請記住重定向URL還必須包含Access-Control-Allow-Origin標頭,否則瀏覽器將在其試圖跨域請求的情況下停止在那裏。「 –