嗨我有一个非常复杂的问题。所以我在github上为这个问题创建了一个新的repo。所以你可以克隆它,看看问题是什么。
https://github.com/guitar9/hafas-client-example
我在这个项目中使用https://github.com/public-transport/hafas-client来获取火车和火车站的信息。
client.journeys(münchenHbf, münchenPassing)
.then((response)=>{
console.log('===============response=====================');
console.log(response);
console.log('====================================');
})
.catch(console.error)
请求在
node_modules/hafas-client/lib/request
问题是在调试模式下一切正常(摇动手机并启动远程JS调试),但当我停止JS调试时,我得到错误'PARSE'。
所以我在request.js中查找并在调试模式下注销请求和响应,而不是在调试模式下。
请求调试模式
{
"method": "post",
"body": "{\"lang\":\"en\",\"svcReqL\":[{\"cfg\":{\"polyEnc\":\"GPA\"},\"meth\":\"TripSearch\",\"req\":{\"outDate\":\"20180614\",\"outTime\":\"174837\",\"ctxScr\":null,\"getPasslist\":false,\"maxChg\":5,\"minChgTime\":0,\"depLocL\":[{\"lid\":\"A=1@L=008000261@\"}],\"viaLocL\":null,\"arrLocL\":[{\"lid\":\"A=1@L=008004158@\"}],\"jnyFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"1023\"},{\"type\":\"META\",\"mode\":\"INC\",\"meta\":\"notBarrierfree\"}],\"getTariff\":false,\"outFrwd\":true,\"getPT\":true,\"getIV\":false,\"getPolyline\":false,\"numF\":5,\"trfReq\":{\"jnyCl\":2,\"tvlrProf\":[{\"type\":\"E\",\"redtnCard\":null}],\"cType\":\"PK\"}}}],\"client\":{\"id\":\"DB\",\"v\":\"16040000\",\"type\":\"IPH\",\"name\":\"DB Navigator\"},\"ext\":\"DB.R15.12.a\",\"ver\":\"1.16\",\"auth\":{\"type\":\"AID\",\"aid\":\"n91dB8Z77MLdoR0K\"}}",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"user-agent": "https://github.com/public-transport/hafas-client"
},
"query": {
"checksum": "6af3b74db20e14c7f94012e3de55dce6"
}
}
响应调试模式
所有信息。一切都好。
请求不在调试模式
{
"method": "post",
"body": "{\"lang\":\"en\",\"svcReqL\":[{\"cfg\":{\"polyEnc\":\"GPA\"},\"meth\":\"TripSearch\",\"req\":{\"outDate\":\"Invalid DateTime\",\"outTime\":\"Invalid DateTime\",\"ctxScr\":null,\"getPasslist\":false,\"maxChg\":5,\"minChgTime\":0,\"depLocL\":[{\"lid\":\"A=1@L=008000261@\"}],\"viaLocL\":null,\"arrLocL\":[{\"lid\":\"A=1@L=008004158@\"}],\"jnyFltrL\":[{\"type\":\"PROD\",\"mode\":\"INC\",\"value\":\"1023\"},{\"type\":\"META\",\"mode\":\"INC\",\"meta\":\"notBarrierfree\"}],\"getTariff\":false,\"outFrwd\":true,\"getPT\":true,\"getIV\":false,\"getPolyline\":false,\"numF\":5,\"trfReq\":{\"jnyCl\":2,\"tvlrProf\":[{\"type\":\"E\",\"redtnCard\":null}],\"cType\":\"PK\"}}}],\"client\":{\"id\":\"DB\",\"v\":\"16040000\",\"type\":\"IPH\",\"name\":\"DB Navigator\"},\"ext\":\"DB.R15.12.a\",\"ver\":\"1.16\",\"auth\":{\"type\":\"AID\",\"aid\":\"n91dB8Z77MLdoR0K\"}}",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"user-agent": "https://github.com/public-transport/hafas-client"
},
"query": {
"checksum": "0d8186da7b06f9cc094075a2a6e21b00"
}
}
未在调试模式下响应
{
"ver": "1.16",
"ext": "DB.R15.12.a",
"lang": "eng",
"id": "",
"err": "PARSE",
"svcResL": []
}
我已经比较了这些要求。在这里你可以看到两个请求之间的区别。 https://www.diffnow.com/?report=pvuq7 问题是outDate,outTime和checksum。有人可以帮帮我吗?
答案 0 :(得分:4)
问题是在hafas-client库中使用Luxon library。您会看到,仅在启用了远程调试的情况下,回购中提供的代码才能在iOS和Android上正常运行。为什么?
启用远程调试后,该代码不会在您的手机中运行,而是在chrome浏览器的V8引擎中运行。停用远程调试后,代码将在您的手机上运行;如果是Android,则代码将在2014年底开始运行的JavaScriptCore(JSC)引擎上运行,该引擎使用自定义设置进行编译以响应本机-可能会产生不同的结果。
作为luxon文档point out,对Android上本机反应的支持是有限的。
在iOS上,react native使用可从OS获得的JSC,该JSC还包括intl功能。 android上的JSC不支持int的原因是JSC与apk捆绑在一起,而使用intl支持对其进行编译会使apk大小增加数MB。
有了一些定制化功能(派生了hafas客户程序)并解决了日期问题,我相信您应该可以解决此问题。您也可以使用this,但要注意,您可能会遇到其他类型的问题,这些问题可能很难获得帮助(有一段时间,Expo client用于使用从此仓库中编译的JSC,但它们由于某些问题不得不停止使用自定义版本)。
或者,您可以尝试使用intl polyfill
我怎么知道的? here中,您将看到错误对象包含大量额外信息。记录错误时,您只是得到description
字段,但是如果记录了request
字段,则会看到它包含"outDate": "Invalid DateTime"
。在那里!
答案 1 :(得分:1)
此处为hafas-client
的作者。发布信息是为了提高知名度,因为我没有评论的声誉。
正如我在https://github.com/public-transport/hafas-client/issues/56#issuecomment-399915315中所记录的,在添加node-libs-react-native
shims之后,我设法在本机使用hafas-client@3.0.0-alpha.9
。< / strong>,请尝试此操作。
当然可能存在与luxon
有关的另一个问题(如https://stackoverflow.com/a/51005700中所述),但是至少查询没有EPARSE
错误或未解码的响应有效载荷的数据不是不是< / em>与luxon
有关,并且显然已解决。