2016-02-18 9 views
5

Mam aplikację Express/Node, która jest wdrożona w instancji Heroku. Aplikacja ma punkt końcowy API POST, który oczekuje pliku .json, odczytuje dane i zapełnia aplikację danymi JSON. Poniżej znajduje się kod backend, który obsługuje żądania POST:Nieoczekiwany koniec wejścia - zwinięcie JSON w aplikacji Express/Node

router.route('/data') 
    .post(function (req, res) { 
    return DataUtils.storeData(req, res); 
    }); 

Utils.storeData = function (req, res) { 
    req.pipe(req.busboy); 
    req.busboy.on('file', function (fieldname, file, filename) { 
    file.on('data', function(data) { 
     var data; 
     try { 
     data = JSON.parse('' + data); // quick casting into a String 
     var numPersonSessionObj = data.length; 
     ... 
     // etc etc... 

Kiedy staramy się żądanie poprzez zwinięcie komendy poniżej:

curl H "Content-Length: 5567" -f plik [email protected]_data/sample_json.json http://[heroku-instance]/api/data

serwer czasami działa dobrze, i przesyła dane, a inne czasy, rzuca „Nieoczekiwany koniec wejścia” błędu. Wygląda na to, że metoda bufora, z której korzystamy, nie odczytuje wszystkich danych z jakiegoś powodu. Po zarejestrowaniu kodu data.length w powyższym kodzie (tj. JSON) wydaje się, że żądanie nie powiedzie się, gdy długość danych jest mniejsza niż przypuszczalnie. Czy coś jest nie tak z tym, co czytam w powyższym pliku JSON? Thanks--

Odpowiedz

1

Długość treści musi być liczbą oktetów treści odpowiedzi.

jeśli spróbuj użyć wartości

data.length 

zamiast

Buffer.byteLength(data) 
+0

można proszę dalszego opracowania na odpowiedź? Podałeś linię kodu, ale nie ma wyjaśnienia, dlaczego odpowiada na to pytanie. Dziękuję Ci. –

Powiązane problemy