Неожиданный конец ввода JSON при использовании fs.watch () и require () NodeJS - PullRequest
0 голосов
/ 10 сентября 2018

При проверке нового файла в моей папке ./Assetto1/results (файл .json) код должен прочитать новый файл (result = require("[...]")) и войти в консоль. Но я всегда получаю одну и ту же ошибку. Даже пытаюсь за 8 часов сейчас. То же самое происходит при использовании fs.readFile() вместо require(). Я даже попробовал модуль npm под названием «decache», чтобы каким-то образом «разыскивать» файл. Моя идея состояла в том, что nodejs ожидает конца файла JSON. Но ничто из этого также не помогает.

Посмотрите на мой код, который я написал:

var fs = require("fs");
fs.watch('./Assetto1/results/', (eventType, filename) => {
console.log("EventType:"+eventType);
    if (eventType == "rename") {
    console.log("Debug: Rename");
    console.log("./Assetto1/results/"+filename);
    result = require("./Assetto1/results/"+filename);
    console.log(result);

    }
})

Вывод на консоль выглядит следующим образом:

SyntaxError: /home/Assetto1/results/2018_9_8_9_0_RACE.json: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Object.Module._extensions..json (internal/modules/cjs/loader.js:708:27)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:20:18)
at FSWatcher.fs.watch (/home/main.js:59:12)
at FSWatcher.emit (events.js:182:13)
at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:130:12)

Содержимое файла JSON (AssettoCorsa Race-Results):

{
"TrackName": "spa",
"TrackConfig": "",
"Type": "RACE",
"DurationSecs": 0,
"RaceLaps": 5,
"Cars": [
    {
        "CarId": 0,
        "Driver": {
            "Name": "NoaH",
            "Team": "",
            "Nation": "DEU",
            "Guid": "76561198190801825",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Black_Falcon_SB_Mobel_Boss_10",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 1,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Black_Falcon_Porta_9",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 2,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Kunos_zp_115",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 3,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Kunos_zp_116",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 4,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Black_Falcon_Dubai_24H_2",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 5,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Black_Falcon_SB_Mobel_Boss_10",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 6,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Black_Falcon_Porta_9",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 7,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Kunos_zp_115",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 8,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Kunos_zp_116",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 9,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "mercedes_sls_gt3",
        "Skin": "Black_Falcon_Dubai_24H_2",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 10,
        "Driver": {
            "Name": "Ian Loncar",
            "Team": "",
            "Nation": "HRV",
            "Guid": "76561198273369988",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_nissan_gtr",
        "Skin": "solid_red",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 11,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_nissan_gtr",
        "Skin": "jet_black",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 12,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_nissan_gtr",
        "Skin": "0_pearl_white",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 13,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_nissan_gtr",
        "Skin": "super_silver",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 14,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_nissan_gtr",
        "Skin": "jet_black",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 15,
        "Driver": {
            "Name": "F. Riestra.ESP.",
            "Team": "",
            "Nation": "",
            "Guid": "76561198130349639",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_audi_r8_plus",
        "Skin": "10_sepang_blue_pearl",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 16,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_audi_r8_plus",
        "Skin": "11_suzuka_gray_metallic_t",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 17,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_audi_r8_plus",
        "Skin": "09_samoa_orange_metallic_t",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 18,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_audi_r8_plus",
        "Skin": "Brilliant_Red",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 19,
        "Driver": {
            "Name": "sale7almanna3i",
            "Team": "",
            "Nation": "QAT",
            "Guid": "76561198139068257",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_lamborghini_huracan_performante",
        "Skin": "blu_cepheus",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 20,
        "Driver": {
            "Name": "raafaal1661",
            "Team": "",
            "Nation": "",
            "Guid": "76561198857669454",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_lamborghini_huracan_performante",
        "Skin": "giallo_horus",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 21,
        "Driver": {
            "Name": "alexpavillanueva",
            "Team": "",
            "Nation": "ESP",
            "Guid": "76561198834760853",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_lamborghini_huracan_performante",
        "Skin": "blu_nethuns",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 22,
        "Driver": {
            "Name": "NoaH",
            "Team": "",
            "Nation": "DEU",
            "Guid": "76561198190801825",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_lamborghini_huracan_performante",
        "Skin": "00_arancio_anthaeus",
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "CarId": 23,
        "Driver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": [
                ""
            ]
        },
        "Model": "ks_lamborghini_huracan_performante",
        "Skin": "rosso_efesto",
        "BallastKG": 0,
        "Restrictor": 0
    }
],
"Result": [
    {
        "DriverName": "NoaH",
        "DriverGuid": "76561198190801825",
        "CarId": 22,
        "CarModel": "ks_lamborghini_huracan_performante",
        "BestLap": 174182,
        "TotalTime": 891017,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "NoaH",
        "DriverGuid": "76561198190801825",
        "CarId": 0,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 2,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 3,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 4,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 5,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 6,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 7,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 8,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 9,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "Ian Loncar",
        "DriverGuid": "76561198273369988",
        "CarId": 10,
        "CarModel": "ks_nissan_gtr",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 11,
        "CarModel": "ks_nissan_gtr",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 12,
        "CarModel": "ks_nissan_gtr",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 13,
        "CarModel": "ks_nissan_gtr",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 14,
        "CarModel": "ks_nissan_gtr",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "F. Riestra.ESP.",
        "DriverGuid": "76561198130349639",
        "CarId": 15,
        "CarModel": "ks_audi_r8_plus",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 16,
        "CarModel": "ks_audi_r8_plus",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 17,
        "CarModel": "ks_audi_r8_plus",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 18,
        "CarModel": "ks_audi_r8_plus",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "sale7almanna3i",
        "DriverGuid": "76561198139068257",
        "CarId": 19,
        "CarModel": "ks_lamborghini_huracan_performante",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "raafaal1661",
        "DriverGuid": "76561198857669454",
        "CarId": 20,
        "CarModel": "ks_lamborghini_huracan_performante",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "alexpavillanueva",
        "DriverGuid": "76561198834760853",
        "CarId": 21,
        "CarModel": "ks_lamborghini_huracan_performante",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 1,
        "CarModel": "mercedes_sls_gt3",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    },
    {
        "DriverName": "",
        "DriverGuid": "",
        "CarId": 23,
        "CarModel": "ks_lamborghini_huracan_performante",
        "BestLap": 999999999,
        "TotalTime": 0,
        "BallastKG": 0,
        "Restrictor": 0
    }
],
"Laps": [
    {
        "DriverName": "NoaH",
        "DriverGuid": "76561198190801825",
        "CarId": 22,
        "CarModel": "ks_lamborghini_huracan_performante",
        "Timestamp": 35470691,
        "LapTime": 180196,
        "Sectors": [
            50515,
            82440,
            47241
        ],
        "Cuts": 0,
        "BallastKG": 0,
        "Tyre": "HR",
        "Restrictor": 0
    },
    {
        "DriverName": "NoaH",
        "DriverGuid": "76561198190801825",
        "CarId": 22,
        "CarModel": "ks_lamborghini_huracan_performante",
        "Timestamp": 35645934,
        "LapTime": 175240,
        "Sectors": [
            48331,
            82125,
            44784
        ],
        "Cuts": 0,
        "BallastKG": 0,
        "Tyre": "HR",
        "Restrictor": 0
    },
    {
        "DriverName": "NoaH",
        "DriverGuid": "76561198190801825",
        "CarId": 22,
        "CarModel": "ks_lamborghini_huracan_performante",
        "Timestamp": 35824671,
        "LapTime": 178746,
        "Sectors": [
            46162,
            85482,
            47102
        ],
        "Cuts": 0,
        "BallastKG": 0,
        "Tyre": "HR",
        "Restrictor": 0
    },
    {
        "DriverName": "NoaH",
        "DriverGuid": "76561198190801825",
        "CarId": 22,
        "CarModel": "ks_lamborghini_huracan_performante",
        "Timestamp": 36007357,
        "LapTime": 182686,
        "Sectors": [
            46340,
            85492,
            50854
        ],
        "Cuts": 0,
        "BallastKG": 0,
        "Tyre": "HR",
        "Restrictor": 0
    },
    {
        "DriverName": "NoaH",
        "DriverGuid": "76561198190801825",
        "CarId": 22,
        "CarModel": "ks_lamborghini_huracan_performante",
        "Timestamp": 36181518,
        "LapTime": 174182,
        "Sectors": [
            46693,
            81995,
            45494
        ],
        "Cuts": 0,
        "BallastKG": 0,
        "Tyre": "HR",
        "Restrictor": 0
    }
],
"Events": [
    {
        "Type": "COLLISION_WITH_ENV",
        "CarId": 22,
        "Driver": {
            "Name": "NoaH",
            "Team": "",
            "Nation": "DEU",
            "Guid": "76561198190801825",
            "GuidsList": [
                ""
            ]
        },
        "OtherCarId": -1,
        "OtherDriver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": null
        },
        "ImpactSpeed": 12.305487,
        "WorldPosition": {
            "X": 415.25763,
            "Y": 38.005207,
            "Z": 847.0971
        },
        "RelPosition": {
            "X": -0.96855915,
            "Y": 0.31426933,
            "Z": -1.4876876
        }
    },
    {
        "Type": "COLLISION_WITH_ENV",
        "CarId": 22,
        "Driver": {
            "Name": "NoaH",
            "Team": "",
            "Nation": "DEU",
            "Guid": "76561198190801825",
            "GuidsList": [
                ""
            ]
        },
        "OtherCarId": -1,
        "OtherDriver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": null
        },
        "ImpactSpeed": 69.01873,
        "WorldPosition": {
            "X": -449.24142,
            "Y": 30.581987,
            "Z": -1006.0361
        },
        "RelPosition": {
            "X": 0.68840855,
            "Y": -0.285217,
            "Z": 2.4184985
        }
    },
    {
        "Type": "COLLISION_WITH_ENV",
        "CarId": 22,
        "Driver": {
            "Name": "NoaH",
            "Team": "",
            "Nation": "DEU",
            "Guid": "76561198190801825",
            "GuidsList": [
                ""
            ]
        },
        "OtherCarId": -1,
        "OtherDriver": {
            "Name": "",
            "Team": "",
            "Nation": "",
            "Guid": "",
            "GuidsList": null
        },
        "ImpactSpeed": 22.243214,
        "WorldPosition": {
            "X": 416.29285,
            "Y": 37.574894,
            "Z": 849.2622
        },
        "RelPosition": {
            "X": -0.8986338,
            "Y": -0.2784356,
            "Z": 2.0484245
        }
    }
]
}

Так что теперь я действительно не знаю, что я могу сделать против этого. Может быть, вы, ребята, можете мне помочь, спасибо.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Итак, ребята, внимательно прочитав ваши посты, у меня возникла мысль, что мне просто нужно дождаться полной записи файла.Я сделал это простым Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 1000);, после этого я могу прочитать файл без единой проблемы.Так что это решение для всех, кто сталкивается с этой проблемой, как я.Спасибо

0 голосов
/ 10 сентября 2018

Как создается файл? Возможно, у вас просто условие состязания с созданным файлом (которое вызывает событие fs.watch и чтение файла), затем JSON записывается после небольшой обработки, но уже слишком поздно. Или JSON велик, и для его написания требуется время.

Два варианта для вас:

  • процесс, который создает JSON, должен работать в другом каталоге (но в той же файловой системе). Как только файл полностью записан, переместите его в каталог. Таким образом, у вас есть атомарное изменение, и вы знаете, что при получении события файл завершен.

    Альтернативой является запись в тот же каталог, но переименование после завершения и соглашение о том, какие файлы являются временными или окончательными (например, если файл .xxxx.tmp игнорирует событие).

  • или всякий раз, когда вы получаете событие для файла (rename или change):

    • отменить любой ранее созданный таймер для этого файла
    • создать новый таймер для этого файла
    • когда таймер истекает, фактически читайте файл
...