如何通过$http POST传递对象参数并在Node.js服务中获取
解决POST请求数据无法在服务端获取的问题
我来帮你排查一下问题所在,主要有几个关键点需要修正:
1. 路由路径不匹配
客户端请求的路径是 /users,但服务端监听的是 /api/users,两者不一致,这会导致请求根本没走到对应的处理逻辑里。
2. 客户端的Promise反模式 + 不必要的JSON序列化
你手动创建了deferred对象,但$http.post本身就返回一个Promise,完全不需要额外包装。另外,Angular的$http服务会自动将JavaScript对象序列化为JSON并设置正确的Content-Type: application/json请求头,手动调用JSON.stringify反而可能导致解析问题。
修改后的客户端代码:
return $http.post(appSettings.baseUrl + '/api/users', {name:"Alex", age:"34"}) .then(function (response) { return response.data; }) .catch(function (error) { throw new Error('Failed to connect'); });
3. 服务端缺少JSON请求体解析中间件
在Node.js/Express中,默认不会自动解析JSON格式的请求体,你需要使用body-parser中间件来处理。
首先安装依赖:
npm install body-parser --save
然后在服务端代码中引入并配置:
const express = require('express'); const bodyParser = require('body-parser'); const app = express(); // 解析JSON格式的请求体 app.use(bodyParser.json()); // 修正路由路径,和客户端保持一致 app.post('/api/users', function (req, res) { // 数据直接在req.body里,不需要取postData const user = req.body; console.log(user); // 现在应该能看到{name: "Alex", age: "34"} // 后续处理逻辑... res.status(200).json({message: 'User received', user: user}); });
4. 服务端错误的取值方式
你之前尝试取req.body.postData,但客户端发送的是直接的用户对象,并没有嵌套在postData字段里,所以直接访问req.body就能拿到完整的用户数据。
按照上面的步骤修改后,应该就能正常获取到POST传递的数据了。
内容的提问来源于stack exchange,提问作者Jijo Cleetus
相关产品推荐
相关产品推荐

