2013-02-23 123 views
6

में AJAX पोस्ट वैरिएबल पढ़ना मैं अपने नोड एप्लिकेशन में AJAX पोस्ट के लिए जो मूल्य भेज रहा हूं उसे प्राप्त करने का प्रयास कर रहा हूं। एक गाइड के रूप this post का उपयोग करना, मैं अब तक इस राशि:नोड.जेएस (एक्सप्रेस के साथ)

नोड में: AJAX तरफ

var express = require('express'); 
var app = express(); 

var db = require('./db'); 

app.get('/sender', function(req, res) { 
    res.sendfile('public/send.html'); 
}); 

app.post('/send_save', function(req, res) { 
    console.log(req.body.id) 
    console.log(req.body.title); 
    console.log(req.body.content); 
    res.contentType('json'); 
    res.send({ some: JSON.stringify({response:'json'}) }); 
}); 

app.listen(3000); 

पर:

$('#submit').click(function() { 
      alert('clicked') 
      console.log($('#guid').val()) 
      console.log($('#page_title').val()) 
      console.log($('#page-content').val()) 
      $.ajax({ 
       url: "/send_save", 
       type: "POST", 
       dataType: "json", 
       data: { 
        id: $('#guid').val(), 
        title: $('#page_title').val(), 
        content: $('#page-content').val() 
       }, 
       contentType: "application/json", 
       cache: false, 
       timeout: 5000, 
       complete: function() { 
        //called when complete 
        console.log('process complete'); 
       }, 

       success: function(data) { 
        console.log(data); 
        console.log('process sucess'); 
       }, 

       error: function() { 
        console.log('process error'); 
       }, 
       }); 
     }) 

यह समस्या है कि मैं req.body नहीं कर सकता है .id (और शीर्षक या सामग्री जैसे किसी अन्य मूल्य), मुझे यह त्रुटि नोड में मिल रही है:

TypeError: Cannot read property 'id' of undefined 

अगर मैं टिप्पणी करता हूं ई कॉल हालांकि, AJAX सफल है। मै खो गया हूँ। क्या मैं कुछ भूल रहा हूँ?

+0

मैं एक ही समस्या है - उपयोग की कोशिश 'परम ('postVariableName') ' – fider

उत्तर

7

req ऑब्जेक्ट में आपके पास body संपत्ति नहीं है। http://expressjs.com/api.html#req.body पर एक नज़र डालें:

यह गुण पार्स अनुरोध शरीर युक्त एक वस्तु है। यह सुविधा बॉडी पार्सर() मिडलवेयर द्वारा प्रदान की जाती है, हालांकि अन्य निकाय पार्सिंग मिडलवेयर इस सम्मेलन का भी पालन कर सकता है। यह संपत्ति {} पर डिफ़ॉल्ट होती है जब bodyParser() का उपयोग किया जाता है।

तो, अगर आप इस तरह अपने एक्सप्रेस webapp को bodyParser मिडलवेयर जोड़ने की जरूरत:

var app = express(); 
app.use(express.bodyParser()); 
+0

आह, मुझे पता था कि मुझे कुछ महत्वपूर्ण याद आ रही थी! हालांकि, जब मैं इसे शामिल करता हूं तो मुझे 'खराब अनुरोध: खराब अनुरोध' प्रतिक्रिया मिलना शुरू हो गया। क्या यह किसी भी तरह से संबंधित है? क्या मुझे इसे एनपीएम के माध्यम से स्थापित करना है? – streetlight

+0

@स्ट्रीटलाइट: मुझे नहीं लगता कि आपको कुछ भी इंस्टॉल करना है, लेकिन मुझे नहीं पता कि उस त्रुटि का कारण क्या हो सकता है। – thejh

+0

आह ठीक है, धन्यवाद आपकी मदद के लिए! इस ऐप के लिए लगभग कुछ भी नहीं है इसलिए मुझे नहीं पता कि इस बुरे अनुरोध के साथ क्या चल रहा है! – streetlight

6

मुद्दा वास्तव में के रूप में thejh ने सुझाव दिया bodyParser मिडलवेयर शामिल करके हल किया गया था।

बस ऐसे ही जवाब में URL पर जाएं रूप एक्सप्रेस अद्यतन विनिर्देश यात्रा करने के लिए सुनिश्चित करें: काम करने के लिए

var app = require('express')(); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 

app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 
app.use(multer()); // for parsing multipart/form-data 

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

इस के लिए: http://expressjs.com/api.html#req.body

प्रलेखन इस उदाहरण प्रदान करता है (एक्सप्रेस 4.x) शरीर-पार्सर मॉड्यूल अलग से स्थापित करने की आवश्यकता है:

https://www.npmjs.com/package/body-parser