在happi .js中,我可以重定向到不同的端点并设置statusCode
In Hapi.js can I redirect to a different endpoint and set a statusCode?
如果用户未经过身份验证以查看特定路由(例如:/admin
) Auth抛出Boom unorthorized
错误,我希望能够重定向到/login
,但仍然返回401
HTTP statusCode
。
我们已经尝试了以下代码:
const statusCode = request.output.payload.statusCode;
if(statusCode && statusCode === 401) {
return reply.redirect('/login').code(statusCode);
}
当我们删除.code(statusCode)
时,重定向工作,但我们将理想的像返回401
代码给客户端而不是302
(重定向)
或…它会是"最佳实践"返回302
…?
上下文:我们正在开发一个小的(可重用的)插件来处理我们的Hapi App/API中的错误,其中一个功能是当auth失败时将
redirect
转换为/login
,见:https://github.com/dwyl/hapi-error#redirecting-to-another-endpoint,我们想让它"正确",以便其他人可以使用它!
这是导致你悲伤的HapiJS源代码(lib/response.js:320):
internals.Response.prototype.redirect = function (location) {
this.statusCode = 302;
this.location(location);
this.temporary = this._temporary;
this.permanent = this._permanent;
this.rewritable = this._rewritable;
return this;
};
可以看到,通过使用reply.redirect()
, Hapi已经回复了一个302代码。您需要决定是在前端回复401并重定向,还是使用Hapi重定向并接受它符合协议标准。
作为最佳实践位的答案,是的,当服务器强制重定向(302重定向)时,Hapi正在做的正是所期望的。为了使用401响应,最佳实践是在客户端进行重定向,就像您只是正常导航到路由一样。
作为参考,reply.redirect()函数定义(lib/reply.js:145)就是
return this.response('').redirect(location);
编辑12月16日:Kelly Milligan指出,现在HapiJS支持使用reply.redirect().code()
,如果你不希望它发送302状态,则不会发送。
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- 使用Snap.SVG设置关于端点的SVG行的动画
- JavaScript表单提交没有't fire asp服务器端点击功能的提交按钮
- 在多行图表中,在每一行的末尾,我想要一个小圆圈和使用d3.js的端点值
- 如何使用asp.net在客户端点击时调用java脚本
- CORS不适用于Uber API OAuth端点
- Angular2的谷歌云端点
- 如何断言后端端点已被调用
- IE9 XMLHTTPRequest请求正文不完整,但readyState=4 statuscode=200
- 使用 POST 和 GET 通过端点交换数据
- 节点中的端点与快速应用程序.js之间的冲突
- 正则表达式模式与各种端点匹配
- 使用 jQuery 调用 PHP 端点的最有效方法
- 无法从 chrome 扩展程序访问端点 API
- Highcharts-防止访问极端点
- Jsplumb使用端点以编程方式添加连接
- 为什么Kendo DataSource使用自定义方法进行端点通信总是发送相同的对象进行删除
- 如果statusCode不是200,那么从http调用返回什么类型的错误对象
- 如何在带有JQuery的Neo4j 2.2.x中使用事务Cypher HTTP端点和新的REST API身份验证和授权
- 在happi .js中,我可以重定向到不同的端点并设置statusCode