数据没有从AngularJS控制器传递到NodeJS服务器
Data is not passed from AngularJS controller to NodeJS server
我正试图将一些值从客户端AngularJS脚本传递到服务器端NodeJS脚本。我这样设置POST请求:
$scope.addUser = function() {
console.log($.param($scope.user));
$http({
method: 'POST',
url: '/addUser',
data: $.param($scope.user),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).
success( function(response) {
console.log("success");
}).
error( function(response) {
console.log("error");
});
};
$scope.user变量为{ name: "john", email: "doe" }
,当通过$.param($scope.user)
传递时,计算结果为name=john&email=doe
。我最初认为问题在于请求的内容类型,它最初是一个JSON对象。在阅读了类似的问题后,我将内容类型更改为x-www-form-urlencoded,但仍然无法从POST请求中获取数据。
以下是POST请求命中的服务器端NodeJS脚本:
app.post('/addUser', function(req, res) {
console.log(req.params);
});
我知道服务器端脚本正在到达,因为我可以打印出req.method等数据,但尝试打印req.params只会导致{}。
为什么我的POST参数没有通过?
请求正文不会保存到req.params
。您需要添加一个中间件来为您解析请求主体。req.params
用于作为URL的一部分提供的key=value
对(例如,张贴到"/foo/bar?baz=bla"将导致req.params.baz === 'bla'
)。
一些示例解决方案:
-
body解析器-仅解析application/json和applications/x-www-form-urlencoded请求体。
-
强大-解析application/json、applications/x-www-form-urlencoded和多部分/表单数据。这就是Express3中的主体解析器中使用的内容。我不确定Express4是否有"官方"的Express中间件。
-
busboy-解析应用程序/x-www-form-urlencoded和多部分/表单数据。它不将文件保存到磁盘本身,而是将文件显示为可读流。API不同于强大的(/来自Express3的body解析器)。有一些Express中间件可用于busboy:
-
connect busboy-一个仅在
req
上设置busboy实例的瘦包装器。您可以将其设置为自动开始解析请求,也可以在想要启动时手动将请求管道传输到req.busboy
。 -
multer-提供了一个更类似于Express3主体解析器中间件的接口(设置了
req.body
和req.files
)。 -
reformed-一个新模块,在Busboy的顶部提供一层,以提供类似于强大的机制(例如将上传的文件保存到磁盘),但也提供其他功能,如现场验证。
-
由于您使用的是express.js,您的POST字段是作为正文的一部分而不是URL接收的,因此您需要使用body
而不是params
:
app.post('/addUser', function(req, res) {
console.log(req.body);//also possible req.body.name | req.body.email
});
试试这样一个更简单的POST怎么样(仅用于测试):
$http.post('/addUser',{ "name": "john", "email": "doe" }).success(function(response) {
console.log("success");
}).error(function(err){
console.log("failure")
});
请注意,Params用作URL参数;像这样的东西:
app.get('/addUser/:userID', function(req, res) {
console.log(req.params.userID);
});
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- Nodejs服务器在解析之前生成输入表单
- Nodejs服务器:加载资源失败:服务器的响应状态为404(未找到)
- NodeJS服务器在检索部分时返回505/404错误
- 将数据发布到nodejs服务器到客户端
- 引用nodejs服务器中html中的java脚本文件
- 正在将数据发送到nodejs服务器
- NodeJs:如何在EC2实例中查看PM2运行的NodeJS服务器的日志
- 为什么我可以't在nodeJS服务器上接收文件
- nodeJS服务器性能缓慢且不稳定
- 需要将数据从NodeJS服务器发送回JQuery客户端
- 如何从本地文件夹(磁盘存储)读取或获取图像文件,并使用nodejs服务器将其发送到Angularjs
- 在nodejs服务器上提供文件的更好方法,而不是if/else
- 如何在 NodeJS 服务器中解析 ajax 发送的数组/对象
- 在 nodejs 服务器端运行传单
- 当我尝试在 couchbase nodejs 服务器上运行简单的测试时,我收到“不正确的参数”错误
- Yeoman 应用程序 - 使用自定义 Nodejs 服务器
- JavaScript 在 nodeJS 服务器上导致错误
- Nodejs 服务器端调试
- 将数据从 Java 客户端发送到 NodeJS 服务器