我们已经运行 Forge v2 一个多月了。我们延迟切换,因为我们的 Forge Web 应用程序(在节点上)是高度定制的,并且迁移是一个手动过程。
一周前,我注意到我们的应用程序没有正确处理来自我们 API 的非 200OK HTTP 状态。问题似乎是缺少错误对象的 responseText 属性。这是一个非常重要的属性,因为当请求不是 200OK 时,我们会以 JSON 格式返回错误信息。
v2 文档引用了一个content
属性,responseText
但没有两个属性 - https://trigger.io/modules/request/current/docs/index.html
我可以确认此功能之前有效,因为当我将 all.js 文件恢复到 v2 升级之前的日期时,它又开始工作了。在对源代码进行了一些扎根之后,问题似乎出在all.js
文件中的这个方法上。
e.ajax({
url: "/_forge/proxy/" + p.match(/\/\/([^\/:]+)/)[1].split("").reverse().join("").replace(/\./g, "/") + "/",
type: "POST",
data: t,
dataType: "text",
timeout: w,
success: A &&
function(E) {
try {
if (x == "xml") {
var D, C;
if (window.DOMParser) {
D = new DOMParser();
C = D.parseFromString(E, "text/xml")
} else {
C = new ActiveXObject("Microsoft.XMLDOM");
C.async = "false";
C.loadXML(E)
}
E = C
} else {
if (x == "json") {
E = JSON.parse(E)
}
}
} catch(F) {}
A(E)
},
error: function(E, C, D) { //E variable has the responseText property, but is not passed along in the callback function
v({
message: "api.ajax with " + JSON.stringify(B) + "failed. " + C + ": " + D,
type: "EXPECTED_FAILURE",
status: C,
statusCode: E.status,
err: D
})
}
})
解压缩 all.js 文件后,它位于您声明 request.ajax 对象的 6800 行标记附近。
重现步骤
- 使用带有错误回调的 forge.request 进行 API 调用
- 让 PHP 文件返回非 200OK 状态的 JSON
- 在错误回调内部,没有用于访问 API 响应文本的 responseText 属性
我的触发器控制面板没有显示我需要更新,据我所知,所有模块都是最新的。
这是伪造功能的回归还是预期的功能?