我有一个 MEAN 堆栈后端,我想在其中响应
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 只会知道响应已经发送,并且它有一个错误状态,但是由于没有调用回调,所以没有有效负载数据传递给你的回调。
我测试了一个独立的 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
属性)。
关于angularjs - 带有 jsonp 负载的 Express.js 响应状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37592009/