gpt4 book ai didi

javascript - 数据未从 AngularJS Controller 传递到 NodeJS 服务器

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:40 25 4
gpt4 key购买 nike

我正在尝试将一些值从客户端 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" } ,计算结果为 name=john&email=doe当经过$.param($scope.user)时。我最初以为问题出在请求的内容类型上,它本来是一个 JSON 对象。在阅读了类似的问题后,我将 content-type 更改为 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 对(例如,POST 到“/foo/bar?baz=bla”将导致 req.params.baz === 'bla')。

一些示例解决方案:

  • body-parser - 仅解析 application/jsonapplication/x-www-form-urlencoded 请求正文。

  • formidable - 解析 application/jsonapplication/x-www-form-urlencodedmultipart/form-data。这是 Express 3 中的正文解析器中使用的内容。我不确定 Express 4 是否有一个“官方”Express 中间件。

  • busboy - 解析application/x-www-form-urlencodedmultipart/form-data。它本身并不将文件保存到磁盘,而是将文件呈现为可读流。该 API 不同于 formidable(来自 Express 3 的/body 解析器)。有一些 Express 中间件可供 Busboy 使用:

    • connect-busboy - 一个瘦包装器,仅根据您的 req 设置 Busboy 实例。您可以将其设置为自动开始解析请求,也可以在需要开始时手动将请求传送到 req.busboy

    • multer - 提供更类似于 Express 3 主体解析器中间件的接口(interface)(带有 req.bodyreq.files 设置)。

    • reformed - 一个新模块,在 Busboy 之上提供了一个层,以提供类似于 formidable 的机制(例如将上传的文件保存到磁盘),但也提供其他功能,例如字段验证。

关于javascript - 数据未从 AngularJS Controller 传递到 NodeJS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23255363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com