2017-08-16 64 views
0

我想在我的Node.js應用程序中將一個ajax調用從我的javascript文件中的一個快速路由,請注意,JavaScript文件也是同一個Node.js應用程序的一部分。Ajax呼叫表示路由不工作?

我遇到的問題是傳遞給路由的數據總是空的。我可以看到路由被調用,因爲我的console.log在req中顯示一個對象,但該對象是空的。

這裏是我的Ajax調用代碼:

$.ajax({ 
     type: 'POST', 
     url: '/match', 
     contentType: 'application/json', 
     data: "test", 
     success: function(data) { 
      console.log("Successfully saved the matched beans to the user."); 
     } 
    }).done(function () { 
     console.log("OK"); 
    }).fail(function (jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR); 
     console.log(textStatus); 
     console.log(errorThrown); 
    }); 

我的路線是這樣的:

router.post("/match", middleware.isLoggedIn, function(req, res) { 
    console.log("Route Test1: " + req.body); 
    console.log("Route Test2: " + JSON.stringify(req.body)); 
}); 

在我得到Route Test1: [object Object]路線的第一的console.log和第二console.log我得到Route Test2: {}

如何訪問我傳遞給路由的數據「測試」?

在此先感謝您的幫助!

+0

@Phil的感謝!這返回'未定義'。實際上,我有一個JSON對象,我需要將它作爲數據傳遞,但是當我開始遇到問題時,我簡化它以僅僅「測試」。任何其他想法? – user2573690

+0

將我的評論移至答案。你是否在'app.use(bodyParser.json())'中使用'body-parser'? – Phil

+0

@Phil是的,我在我的app.js app.use(bodyParser.urlencoded({extended:true})); – user2573690

回答

1

首先,確保你使用的json()方法從body-parser,即

app.use(bodyParser.json()) 

雖然"test"是有效的JSON,它不是非常豐富。

嘗試

contentType: 'application/json', 
processData: false, 
data: JSON.stringify({data: 'test'}) 

,並在您的路線,

console.log('Route Test1:', req.body.data) 

你正在運行到的是,你會被自動轉換req.body成字符串因您的通話console.log另一個問題到串聯。

相反,嘗試

console.log('Route Test1:', req.body) 
+0

謝謝!添加app.use(bodyParser.json());到app.js和processData:false爲ajax調用工作!我可以在不添加bodyParser行的情況下實現相同的功能嗎?它保持良好,但只是爲了我的理解。 – user2573690

+0

@ user2573690是否要將JSON請求發佈到您的應用程序?如果是這樣,那麼你應該使用'bodyParser.json()'。否則,你需要改變你的客戶端代碼來發布'application/x-www-form-urlencoded'格式的數據 – Phil

+0

啊我看到了,我只是做了一些關於bodyParser的閱讀,因爲我需要發佈JSON請求。謝謝您的幫助! – user2573690