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