2017-06-21 160 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