2017-08-16 66 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