2016-04-13 27 views
0

NOT: Bu soruna inanıyorum, çünkü bu soru daha özeldir is a duplicate of this similar question.MongoDB imlecinin nesnelere aktarılması HTTP yanıtı

Nodejs-mongodb-driver ile Mongo'dan birden çok nesne almaya çalışıyorum ve nesneleri JSON olarak bir HTTP yanıtına yazdım. Nesneler bir dizi şeklinde olmalıdır, ancak bellek yükü nedeniyle imleç üzerinde toArray() aramak istemiyorum ve mümkün olduğunda büyük JSON.stringify çağrıları önlemek için deneyin. Tarayıcıdaki nesne aşağıdaki gibi görüntülenir.

{"obj", "obj"}{"obj", "obj"} // clearly malformed 

Bunu yapmanın etkili bir yolu var mı?

cevap

1

Yazdığınız kodu açıklayacağım, bu nedenle neden hatalı biçimlendirilmiş JSON'u döndürdüğünü ve neden postaladığınız yanıttan dolayı toArray() veya JSONStream libary'ye ihtiyaç duyduğunuzu anlıyorsunuz.

İlk collection.find(), bir Cursor nesnesini döndürür. Bu noktada hiçbir veri okunmadı. Ardından, .stream(JSON.stringify) araması, JSON.stringify dönüşüm işleviyle okunabilir bir Stream döndürür. Hala veri yok.

.pipe(response) çağrısı, Stream'un sonuna ve sonuna kadar JSON.stringify işlevini çağıran her nesne için okur. Her bir object için ayrı ayrı arama yaptığına ve bu nedenle array oluşturmayacağına dikkat edin. Bunun yerine, 'dan sonra hatalı biçimlendirilmiş JSON, object numaranızı alırsınız.

Şimdi iki kez (Stream from a mongodb cursor to Express response in node.js) gönderilecek olan sorudaki yanıt sizin için işe yarardı, ancak JSONStream ile ek bir kitaplık gerektirir. JSONStream, JSON çıktı için CursorStream düzgün şekilde işler. Bunun gerçekten de yükü azalttığını bilmiyorum, ama sen bunu deneyebilirsin.

Bir ek kütüphane olmadan toArray()'u kullanmanız gerekecektir.

+0

Bunun neden yanlış olduğunu biliyorum. Bunu yapmanın etkili bir yolunu arıyorum. Ek bir kütüphane varsa neden bir öneride bulunmuyorsunuz? – MatUtter

+0

Bu cevabı zaten sorunuzun ilk satırına gönderdiniz. ve hala düşünüyorumAreld etkilidir. test yaptın mı Kütüphane, yinelenen olmadığını düşündüğünüz sorunun cevabıdır. – x4rf41

İlgili konular