我正在使用 HelloSign API 为 React Native 中的合同签署生成 web 视图。端点如下。
app.get('/api/contract/signcontract', Contract.viewAndSignContract);
这个端点在生成嵌入链接(与问题无关)后被命中,它呈现一个骨架 index.jade 并传递 hellosign.open 嵌入链接(URI 在传递到端点之前被编码,因此是解码)
exports.viewAndSignContract = function(req, res, next) {
const embedLink = decodeURIComponent(req.query.url);
res.render('index', {embedLink});
}
它使用 hellosign.open() 呈现 hellosign 嵌入式流。这方面你已经看到了,我相信它完全是股票代码。端点是通过 webview 上的源 url 命中的,这是 react-native 代码,但足以说明一切都很普通。
<WebViewBridge
ref="webviewbridge"
onBridgeMessage={this.onBridgeMessage.bind(this)}
source={{ uri: `${ROOT_URL}/api/contract/signcontract?url=${encodeURIComponent(this.props.partner.embedLink)}` }}
style={{ flex: 1 }}
/>
错误是几乎每次用户打开嵌入式流时,至少有 2 个获取请求:
第一个是偶尔的,不是每次。只是一个重定向。
"GET /api/contract/signcontract?url= HTTP/1.1" 304 - "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C89"
这两个是问题:
"GET /api/contract/signcontract?ux_version=2?parent_url=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fcontract%2Fsigncontract&skip_domain_verification=1&client_id=ID_HIDDEN&user_culture=en_US&debug=true&js_version=1.2.5 HTTP/1.1" 304 - "http://localhost:3000/api/contract/signcontract?url=" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C89"
这里真正的错误是/contract/undefined虽然我不明白为什么在访问一个网页时会有多个 GET 请求。
"GET /api/contract/undefined?ux_version=2&parent_url=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fcontract%2Fsigncontract&skip_domain_verification=1&client_id=ID_HIDDEN&user_culture=en_US&debug=true&js_version=1.2.5 HTTP/1.1" 404 262 "http://localhost:3000/api/contract/signcontract?ux_version=2?parent_url=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fcontract%2Fsigncontract&skip_domain_verification=1&client_id=ID_HIDDENc&user_culture=en_US&debug=true&js_version=1.2.5" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C89"
这些是本地终端日志,但是查看 Heroku 日志的情况相同。没有/contract/:params
路线,所以我看不到/signcontract
格式错误和undefined
. 这些请求总是以完全相同的时间戳发生,一个并不总是在另一个之前发生,它们会翻转。我还想提一下,它不会破坏整个应用程序。
这两个 GET 请求总是存在,但在最坏的情况下,它会Cannot GET /api/contract/undefined?rest_of_params
在 web 视图中短暂显示,然后重定向到真正的 hellosign 嵌入式流,一旦出现蓝月亮,它就不会重定向并停留在“CANNOT GET”屏幕上。这一切对我来说似乎非常违反直觉,我无法确定问题出在哪里。