我有一个MEAN-stack后端,我想用
回复return res.status(400).jsonp({
message: 'Parsing failed.',
code: '123'
});
当角度应用程序使用此JSONP端点并遇到此特定错误时,它会收到400但没有其有效负载。当我将状态更改为200/300时,它会很好,而不是400/500。
在其他路由(POST)上,我可以使用4 **状态代码和有效负载进行响应而不会出现任何问题。
return res.status(400).send({
message: 'Codes do not match.',
code: '234'
});
任何想法,我忽略了什么?
答案 0 :(得分:2)
看起来这是一个浏览器:当请求远程脚本时(如JSONP请求的情况),并且响应返回400(或更高)HTTP状态,任何仍可返回的代码没有评估响应体(这实际上非常有意义)。
Angular只知道响应已经发送,并且它有错误状态,但由于没有调用回调,因此没有有效负载数据传递给你的回调。
我测试了一个独立的HTML页面:
<script>
function foo(data) { alert('foo') }
</script>
<script src="/endpoint?callback=foo"></script>
以下Express处理程序:
app.get('/endpoint', (req, res) => {
return res.status(400).jsonp({ hello : 'world' });
});
400状态不会触发警报,200状态会触发警报。如果处理程序返回纯JS(它就像一个加载了.js
的简单<script src=...>
文件),它也不起作用。
因此,对于JSONP请求,您应该坚持使用200个响应并以其他方式传达任何错误(例如在响应对象中设置error
属性)。