Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点中的二进制数据已损坏或未正确读取_Javascript_Node.js_Reactjs_Protocol Buffers - Fatal编程技术网

Javascript 节点中的二进制数据已损坏或未正确读取

Javascript 节点中的二进制数据已损坏或未正确读取,javascript,node.js,reactjs,protocol-buffers,Javascript,Node.js,Reactjs,Protocol Buffers,我有一个带有以下组件的React应用程序: import React from 'react'; import PropTypes from 'prop-types'; import { isDelayN, isDelayS } from '../utils/api'; function IsDelayN (props) { isDelayN(props.sub, props.stop); if (props.stop === null) { return (n

我有一个带有以下组件的React应用程序:

import React from 'react';
import PropTypes from 'prop-types';
import { isDelayN, isDelayS } from '../utils/api';

function IsDelayN (props) {
    isDelayN(props.sub, props.stop);
    if (props.stop === null) {
        return (null);
    } else if (isDelayN.noDelay) {
        return (<p>The next train will arrive in {isDelayN.noDelay} minutes.</p>);
    } else if (isDelayN.yesDelay <= 10) {
        return (<p>A {isDelayN.yesDelay} delay isn't that big a deal, right?</p>);
    } else if (isDelayN.yesDelay > 10 && isDelayN.yesDelay <= 15) {
        return (<p>Oof, you've got a {isDelayN.yesDelay} minute delay. You should let your boss/friends/Tinder date know you're going to be late.</p>);
    } else {
        console.log(isDelayN.noDelay);
        return (<p>So... The MTA's reporting a {isDelayN.yesDelay} minute delay for you right now. Tbh, wherever you're headed, you might as well call out sick.</p>);
    }
}

function IsDelayS (props) {
    isDelayS(props.sub, props.stop);
    if (props.stop === null) {
        return (null);
    } else if (isDelayS.noDelay) {
        return (<p>The next train will arrive in {isDelayS.noDelay} minutes.</p>);
    } else if (isDelayS.yesDelay <= 10) {
        return (<p>A {isDelayS.yesDelay} delay isn't that big a deal, right?</p>);
    } else if (isDelayS.yesDelay > 10 && isDelayN.yesDelay <= 15) {
        return (<p>Oof, you've got a {isDelayS.yesDelay} minute delay. You should let your boss/friends/Tinder date know you're going to be late.</p>);
    } else {
        return (<p>So... The MTA's reporting a {isDelayS.yesDelay} minute delay for you right now. Tbh, wherever you're headed, you might as well call out sick.</p>);
    }
}

export { IsDelayN, IsDelayS };
控制台还提供以下错误:
未处理的拒绝错误:Message.transit\u realtime.FeedMessage#decode:6中未知字段13的导线类型非法。当我在谷歌上搜索该错误消息时,我发现了这个问题(我在项目中使用的
mta gtfs realtime bindings
package在引擎盖下有
protobufjs
)。
protobufjs
的创建者解释说,“通常,类似这样的错误是由于二进制数据被破坏而导致的。关于该主题有一个wiki页面:

此外,关于如何手动检查二进制数据的两个示例如下:#55。“

不幸的是,我对读取二进制数据或Node了解不够,无法理解他建议的解决方案如何应用于我的项目。有人能给我一些见解吗

import GtfsRealtimeBindings from 'mta-gtfs-realtime-bindings';
import rp from 'request-promise';

function getFeedData (sub) {
    var feedId;
    switch (sub) {
        case '1': case '2': case '3': case '4': case '5': case '6': case 'S':
            feedId = 1;
            break;
        case 'A': case 'C': case 'E':
            feedId = 26;
            break;
        case 'N': case 'Q': case 'R': case 'W':
            feedId = 16;
            break;
        case 'B': case 'D': case 'F': case 'M':
            feedId = 21;
            break;
        case 'L':
            feedId = 2;
            break;
        case 'G':
            feedId = 31;
            break;
    }
    rp({
        method: 'GET',
        url: 'https://cors-anywhere.herokuapp.com/http://datamine.mta.info/mta_esi.php?key=5db5e052519d17320f490738f2afe0d5&feed_id=' + getFeedData.feedId,
        encoding: null
    }).then((buf) => {
        const feed = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(buf);
        return { feed: feed };
    });
}

function reverseStop (sub, stop) {
    var stopIdN;
    var stopIdS;
    var stopData = require('./stops');
    var invalidEntries = 0;
    function filterByName (item) {
        if (item.stop_name == stop && typeof item.stop_id === 'string' && item.stop_id.charAt(0) == sub) {
            return true;
        }
        invalidEntries++;
        return false;
    }
    var stopObjs = stopData.filter(filterByName);
    for (var i = 0; i < stopObjs.length; i++) {
        if (stopObjs[i].stop_id.charAt(stopObjs[i].stop_id.length - 1) == 'N') {
            stopIdN = stopObjs[i].stop_id;
        } else if (stopObjs[i].stop_id.charAt(stopObjs[i].stop_id.length - 1) == 'S') {
            stopIdS = stopObjs[i].stop_id;
        }
    }
    return {
        stopIdN: stopIdN,
        stopIdS: stopIdS
    };
}

export function isDelayN (sub, stop) {
    var arrivals = [];
    var delays = [];
    reverseStop(sub, stop);
    getFeedData(sub);
    function dataFilter () {
        var invalidEntries = 0;
        var feedObjs = getFeedData.feed.filter(function (feedObj) {
            if (feedObj.entity.trip_update.stop_time_update.stop_id == reverseStop.stopIdN) {
                return feedObj.entity.trip_update.stop_time_update;
            }
        });
        for (var i = 0; i < feedObjs.length; i++) {
            arrivals.push(feedObjs.arrival.time.low);
            delays.push(feedObjs.arrival.delay);
        }
    }
    var nextArrival = Math.min(...arrivals);
    var delayIndex = arrivals.indexOf(nextArrival);
    var delay = delays.delayIndex;
    if (delay === null || Math.ceil(delay / 60) <= 5) {
        var noDelay = Math.ceil((nextArrival - getFeedData.feed.header.timestamp.low) / 60);
        return { noDelay: noDelay };
    } else {
        var yesDelay = Math.ceil(delay / 60);
        return { yesDelay: yesDelay };
    }
}

export function isDelayS (sub, stop) {
    var arrivals = [];
    var delays = [];
    reverseStop(sub, stop);
    getFeedData(sub);
    function dataFilter () {
        var invalidEntries = 0;
        var feedObjs = getFeedData.feed.filter(function (feedObj) {
            if (feedObj.entity.trip_update.stop_time_update.stop_id == reverseStop.stopIdS) {
                return feedObj.entity.trip_update.stop_time_update;
            }
        });
        for (var i = 0; i < feedObjs; i++) {
            arrivals.push(feedObjs.arrival.time.low);
            delays.push(feedObjs.arrival.delay);
        }
    }
    var nextArrival = Math.min(...arrivals);
    var delayIndex = arrivals.indexOf(nextArrival);
    var delay = delays.delayIndex;
    if (delay === null || Math.ceil(delay / 60) <= 5) {
        var noDelay = Math.ceil((nextArrival - getFeedData.feed.header.timestamp.low) / 60);
        return { noDelay: noDelay };
    } else {
        var yesDelay = Math.ceil(delay / 60);
        return { yesDelay: yesDelay };
    }
}