带jsonp载荷的Express.js响应状态码

我有一个平均值后端,我想回应

return res.status(400).jsonp({ message: 'Parsing failed.', code: '123' }); 

当angular度应用程序使用此JSONP端点并遇到此特定错误时,它会收到一个400,但没有其有效负载。 当我将状态更改为200/300时很好,而400/500则没有。

在其他路线(POST)我可以回应一个4 **状态代码和有效载荷没有任何问题。

 return res.status(400).send({ message: 'Codes do not match.', code: '234' }); 

任何想法,我俯瞰?

看起来这是一个浏览器事件:当请求一个远程脚本时(与JSONP请求一样),并且响应返回一个400(或更高)的HTTP状态,任何代码仍然可能返回到响应主体没有评估(这实际上是非常有意义的)。

Angular只知道响应已经发送,并且它有一个错误状态,但由于没有调用callback,所以没有有效载荷数据传递给你的callback函数。

我testing了一个独立的HTML页面:

 <script> function foo(data) { alert('foo') } </script> <script src="/endpoint?callback=foo"></script> 

和下面的快速处理程序:

 app.get('/endpoint', (req, res) => { return res.status(400).jsonp({ hello : 'world' }); }); 

400状态不触发警报,200状态。 如果处理程序返回普通的JS(就像使用<script src=...>加载的一个简单的.js文件一样),它也不起作用。

因此,对于JSONP请求,您应该坚持200个响应,并以其他方式传达任何错误(例如在响应对象中设置error属性)。