2012-12-19 66 views
5

無論req.params/req.query/req.body和$ .post({..}我使用什麼組合,我都無法從我的Jquery post請求中提取JSON數據。將jquery數據發送到快遞

這是我jQuery的

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

我也嘗試過的各種排列:

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

這是我的node.js EXP RESS代碼:

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

我試圖訪問數據的電子郵件和名稱沒有成功的無窮的方法。如果解決方案是對req.body/req.params的簡單修改,但任何事情都有可能,我會感到驚訝!數據只是不存在! (它不會出現在我的網址或者 - 所有我看到的是本地主機:1337)

req.body/req.params/req.param.params/req.params 都返回不確定和REQ。查詢返回[]

req.route 回報

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

我試着加入:

app.use(express.bodyParser()); 

但是,不可否認,我不完全瞭解其用途。任何幫助是極大的讚賞。

節日快樂! //山姆

+0

也許這會幫助你一點嗎? http://stackoverflow.com/questions/5710358/how-to-get-post-query-in-express-node-js –

+0

'bodyParser'中間件是一個初始化'身體從POST身體',所以你真的需要這個。確保在安裝路由之前使用它(即在執行'app.use(app.router)'或第一個'app.get' /'app.post'等調用之前)。 –

+0

Linus說了什麼,確保在配置bodyParser之前設置路由。 – leepowell

回答

1

你將不得不使用它,像這樣的任何路線之前添加bodyParser()中間件:

app.use(express.bodyParser()); 

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

的方式表達的作品是每個請求通過中間件和路線流淌下來按照它們被聲明的順序。由於bodyParser()中間件現在在你的路由之前被聲明,它將有機會將請求的主體解析爲一個很好的JSON格式,將解析後的值保存到req.body中,然後將控制傳遞給下一個路由/中間件;否則,req.body將根本不存在。

+0

不錯,謝謝你的回答! –