2017-06-21 158 views
1

由該問題「Make POST JSON Request From HTML Script To A Node.JS App In Another Domain」後期,我實現了一個CORS POST請求:CORS POST請求返回空體

var request = new XMLHttpRequest(); 
var params = "parameter=test"; 
request.open('POST', 'http://localhost:3009/param_upload', true); 
request.onreadystatechange = function() {if (request.readyState==4) alert("It worked!");}; 
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
request.send(params); 

這是非常接近在互聯網的例子。這是我的設置我的node.js服務器端:

app.use(cors()); 
var corsOptions = { 
    origin: '*', 
    credentials: true, 
    allowedHeaders: ['*'], 
    optionsSuccessStatus: 200 
} 

當然,我app.post功能有CORS(corsOptions)在其頭部。但不知何故身體是空的。根據要求,我得到了一個非常長的答覆,裏面沒有測試文字。我可能錯過了一點,但環顧四周,並沒有發現它。如果有人幫忙,我會很高興。

+1

查找控制檯中的錯誤?對於'allowedHeaders'&'*'請參閱https://stackoverflow.com/questions/13146892/cors-access-control-allow-headers-wildcard-being-ignored –

+0

該函數成功返回。沒有錯誤。我會檢查allowedHeaders。 – coras09

+1

「但不知何故,身體是空的」在節點JS端或發送的http請求本身是空的?爲什麼在使用cors中間件後創建corsOptions對象?你必須將這些選項提供給cors中間件函數才能生效:'''app.use(cors(corsOptions));''' – Gatsbill

回答

3

我想你忘了使用BodyParser中間件。

https://github.com/expressjs/body-parser

// parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: false })) 

// parse application/json 
app.use(bodyParser.json()) 

有了這個中間件你身體的所有數據將在req.body。

例:

app.post('/test', function(req, res) { 
    // body data 
    console.log(req.body); 
} 
+0

我不能相信我忘了這個。非常感謝。我有其他請求的JSON一個,但忘了檢查我是否需要一個用於urlencoded字符串。再次,非常感謝。 – coras09