在调试模式和正常模式

时间:2018-06-14 16:06:04

标签: javascript android reactjs react-native request

嗨我有一个非常复杂的问题。所以我在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。有人可以帮帮我吗?

2 个答案:

答案 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有关,并且显然已解决。