SORU
11 Kasım 2013, PAZARTESİ


Düğüm JS - Express İstek varlığı çok büyük

Express aşağıdaki hatayı alıyorum:

Error: request entity too large
    at module.exports (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/node_modules/raw-body/index.js:16:15)
    at json (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/json.js:60:5)
    at Object.bodyParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:53:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.cookieParser [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.logger (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/logger.js:158:5)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.staticMiddleware [as handle] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/static.js:55:61)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:193:15)
TypeError: /Users/michaeljames/Documents/Projects/Proj/mean/app/views/includes/foot.jade:31
    29| script(type="text/javascript", src="/js/socketio/connect.js")
    30| 
  > 31| if (req.host='localhost')
    32|     //Livereload script rendered 
    33|     script(type='text/javascript', src='http://localhost:35729/livereload.js')  
    34| 

Cannot set property 'host' of undefined
    at eval (eval at <anonymous> (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:152:8), <anonymous>:273:15)
    at /Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:153:35
    at Object.exports.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:197:10)
    at Object.exports.renderFile (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:233:18)
    at View.exports.renderFile [as engine] (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/jade/lib/jade.js:218:21)
    at View.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/view.js:76:8)
    at Function.app.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/application.js:504:10)
    at ServerResponse.res.render (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/lib/response.js:801:7)
    at Object.handle (/Users/michaeljames/Documents/Projects/Proj/mean/config/express.js:82:29)
    at next (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/proto.js:188:17)

POST /api/0.1/people 500 618ms

Am meanstack kullanıyorum. Benim express.js aşağıdaki kullanım ifadeleri var

//Set Request Size Limit
app.use(express.limit(100000000));

Değerli içerik-uzunluk Başlığı görebiliyorum fiddler içinde: 1078702

Bu sekizli, bu 1.0787 megabayt olduğunu düşünüyorum.

İfade bana yani yığın proje yapısını kullanarak değil, daha önce başka bir ifade projede gönderme yapıyordum json dizi sonrası izin değil neden hiçbir fikrim yok.

CEVAP
13 Kasım 2013, ÇARŞAMBA


Aynı hatayı geçenlerde yaptım ve bulduğum tüm çözümler işe yaramadı.

Bazı kazma sonra, app.use(express.bodyParser({limit: '50mb'})); ayarı doğru limit yaptığını buldum.

console.log('Limit file size: ' limit); node_modules/express/node_modules/connect/lib/middleware/json.js:46 ve yeniden bir düğüm eklerken, bu konsol çıktısını alıyorum:

Limit file size: 1048576
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Limit file size: 52428800
Express server listening on port 3002

connect modülü yüklenirken ilk başta, sınırı (1048576 bayt) 1 MB olarak ayarlanmış olduğunu görüyoruz. Bu sınır koyduğum zaman, console.log tekrar aradı ve bu sefer sınırı 52428800 (50mb). Ancak, ben hala 413 Request entity too large.

Sonra node_modules/express/node_modules/connect/node_modules/raw-body/index.js:10 16 *ekledim ve başka bir satırını büyük bir istekle rota (hata çıktı önce) çağrılırken konsol gördüm :

Limit file size: 1048576

Bu şekilde, bir yerde, connect sıfırlar sınırı parametre ve biz belirtilen ne yok sayıyor anlamına gelir. Rota tanımında bodyParser parametreleri belirterek ayrı ayrı, ama ya hiç şans çalıştım.

Kalıcı olarak ayarlamak için herhangi bir doğru yolu bulmak, olabilir "patch" modülü doğrudan içinde. Eğer kullanıyorsanız 3.4.4, node_modules/express/node_modules/connect/lib/middleware/json.js satır 46 bu İfade ekleyin :

limit = 52428800; // for 50mb, this corresponds to the size in bytes

Satır sayısı hızlı bir aynı sürümünü şunu bile farklı olabilir. Lütfen bu olduğunu unutmayınkötü uygulamave olacaktırüzerinesizin modül güncelleme.

Yani bu geçici bir çözüm için çalışıyor, ama bir çözüm (veya modülü modülü bir sorun olma ihtimaline karşı sabit) olarak kodunuzu buna göre güncellemelisiniz.

Bu sorun hakkında an issue on their Github açtım.

[Düzenle]

Biraz araştırma ve testlerden sonra, hata ayıklama, app.use(express.bodyParser({limit: '50mb'})); ama eklediğim buldumsonraapp.use(express.json());. Express script çalışırken karşılaştığı ilk çözümleyici express.json() çünkü 1mb küresel sınırı ayarlayın. Yukarıda bodyParser hareket işe yaradı.

Bu, bodyParser() Connect yöntemini 3.0 kaldırılmış olacak ve kullanılmamalıdır. " dedi. Bunun yerine, ayrıştırıcıları explicitely senin gibi çok bildirmeniz gerekir :

app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));

Durumda çok parçalı (dosya yükleme için) this post görmek gerekir.

İkinci düzenleme

express.json() express.urlencoded() yerine 4, Express body-parser modülü gerektirir gerekir, şu şekilde: json() urlencoded() yöntemlerini kullandığını unutmayın

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

Eğer extended seçeneği açıkça bodyParser.urlencoded() tanımlı ise bir uyarı (body-parser deprecated undefined extended: provide extended option) atmak olacak. Bu seçenek bir sonraki sürümü gerekli olacak çünküdeğilartık isteğe bağlı olacak. extended seçeneği hakkında daha fazla bilgi için, lütfen body-parser 42 *bakın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eHow

    eHow

    27 NİSAN 2006
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009