2013-05-11 6 views
21

İstemcimden Express çalıştıran bir düğüm sunucusuna JSON verileri gönderirken bir sorun yaşıyorum.jQuery kullanarak ifade etmek için jsonu atama

var express = require('express'); 

var app = express(); 

app.configure(function(){ 
    app.use(express.bodyParser()); 
    app.use(app.router); 
    app.use(express.logger()); 
}); 

app.listen(80); 

app.post('/', function(req,res){ 
    console.log(req.body); 
    console.log(req.body.number + 1); 
}); 

Bu sunucu sadece konsola tüm POST verilerini kaydeder:

İşte benim sorunu gösteren basit bir sunucu var.

Sonra Chrome'un geliştirme konsoluna şu yapıştırırsanız: $.post('/', {number:1});

sunucu baskılar dışarı:

{ number: '1' } 
11 

nasıl bir dize olarak yorumlanır ediliyor geçiyorum numarayı durdurabiliriz? Kullanmakta olduğum bodyParser aracı yazılımı ile ilgisi var mı?

Herhangi bir yardım için teşekkür ederiz!

cevap

39

$.post url kodlanmış veri gönderir, böylece gerçekten gönderilir sonra bodyParser katman tarafından hem olabildiğince ayrıştırılır number=1 vardır.

Jsonu göndermek için JSON.stringify({number:1})'u kullanmalısınız. Bu çalıştı

$.ajax({ 
    url: '/', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({number:1})} 
) 
+0

, açıklama :) –

+2

için teşekkürler Ve unutmayın:

maalesef kullanmak daha iyidir, böylece (yine de idare edecek ifade) uygun Content-Type başlığı ayarlamak olmaz $.post kullanma contentType: 'application/json' başlığını eklemek veya sunucuda req.body'de hiç veri olmayacaktır. –

+0

@soulcheck Soruyu buraya bakabilir misiniz? https://stackoverflow.com/questions/47085674/send-object-to-nodejs-using-post-method buna benzer ama diziyle başka bir özellik göndermem gerekiyor – Viet