2012-12-19 10 views
5

Indipendentemente dalla combinazione di req.params/req.query/req.body e $ .post ({..} che utilizzo, non riesco a estrarre i dati JSON dalla mia richiesta di Jquery in express .Invio di dati Jquery a Express

Questo è il mio jQuery:

$.post("/mail", {email : "[email protected]", name : "[email protected]"}); 

ho anche provato varie permutazioni di:

$.ajax({type: "POST", url: "/mail", dataType :"json", data : 
{email : "[email protected]", name : "[email protected]"}}); 

Questo è il mio node.js exp ress Codice:

app.post("/mail", function(req, res) { 
    console.log(req.body.name); 
    console.log(req.route); 
    console.log("params1: " + req.param.params); 
.... 

Ho provato infiniti modi di accesso alla posta elettronica di dati e il nome senza successo. Sarei sorpreso se la soluzione fosse una semplice modifica a req.body/req.params ma tutto è possibile! I dati non sono lì! (Non appare nel mio url sia - tutto quello che vedo è localhost: 1337)

req.body/req.params/req.param.params/req.params restituiscono tutteindefinito e req. query restituisce[].

req.route rendimenti:

{ path: '/mail', 
    method: 'post', 
    callbacks: [ [Function] ], 
    keys: [], 
    regexp: /^\/mail\/?$/i, 
    params: [] } 

Ho provato ad aggiungere:

app.use(express.bodyParser()); 

Ma, è vero, non capisco pienamente il suo scopo. Qualsiasi aiuto è molto apprezzato.

Buone vacanze! // Sam

+0

Forse questo ti aiuterà un po '? http://stackoverflow.com/questions/5710358/how-to-get-post-query-in-express-node-js –

+0

Il middleware 'bodyParser' è quello che inizializza' req.body' dal corpo POST, quindi hai davvero bisogno di questo. Assicurati di usarlo prima di montare i percorsi (ad esempio prima di fare "app.use (app.router)" o la tua prima chiamata "app.get' /' app.post' etc). –

+0

Cosa ha detto Linus, assicurati che nella tua configurazione bodyParser sia impostato PRIMA del tuo routing. – leepowell

risposta

1

Dovrete aggiungere il bodyParser() middleware prima di qualsiasi percorsi che lo utilizzano, in questo modo:

app.use(express.bodyParser()); 

app.post('/mail', function(req, res) { 
    console.log(req.body); // the body attribute will be created by the bodyParser() 
}); 

Il modo opere esprimono è che ogni richiesta viene scorreva attraverso il middleware e gli itinerari nell'ordine in cui sono dichiarati. Poiché il middleware bodyParser() è stato dichiarato prima del percorso, avrà la possibilità di analizzare il corpo della richiesta in un bel formato JSON, inserire il valore analizzato in req.body e quindi passare il controllo alla route/middleware successiva; altrimenti, req.body semplicemente non esiste.

+0

carino, grazie per questa risposta! –