在 Angular 中发布时表单数据是正确的,但节点中的 req.body 为空?

Ben*_*eds 5 forms post node.js express angularjs

我正在尝试对我创建的 RESTful API 进行简单的 POST 调用。我使用 Angular 作为客户端,nodejs 作为服务器,mongodb+express+ multer作为数据库。

当使用POSTman测试后端时,对象被正确创建,从 req.body 获取数据。在我的 Angular 控制器的 createProject 方法中,我在发布到 API 之前打印出我的 formData。表单数据看起来正确。当正确的表单数据被发布到工作服务器时,req.body 显示为空。

这是我的相关服务器代码:

app.use(express.static(__dirname + '/public'));
app.use(multer({ dest: 'public/uploads/'}));

router.route('/projects')  // accessed at //localhost:8080/api/projects

.post(function(req, res) {
    console.log(req.body); // returns empty set
    var project = new Project();

    project.name = req.body.name;
    project.description = req.body.description;
    project.newComments = 0;
    project.newPosts = 0;
    //project.imageURL = req.body.imageURL;

    project.save(function(err) {
        if (err)
            res.send(err);

        Project.find(function(err, projects) {
            if (err) res.send(err);
            res.json(projects);
        });
    });
})

app.use('/api', router);
Run Code Online (Sandbox Code Playgroud)

这是我的相关角度代码:

$scope.createProject = function() {
    console.log($scope.formData); // returns correct **{name: "adawda", description: "dawdaw"} **
    $http.post('/api/projects', $scope.formData)
        .success(function(projectData) {
            $scope.formData = {};
            $scope.imageURL = "";
            $scope.projects = projectData;
            console.log(projectData);
        })
        .error(function(projectData) {
            console.log('Error: ' + projectData);
        });
};
Run Code Online (Sandbox Code Playgroud)

这是我的相关 HTML 代码:

<input type="text" placeholder="name of project" ng-model="formData.name" />
<input type="text" placeholder="description" ng-model="formData.description" />
<button type="submit" class="button" ng-click="createProject()">Create Project</button>
Run Code Online (Sandbox Code Playgroud)

问题:

Angular 如何将数据从 $scope.formData 传递到请求,为什么它与我的服务器配置不兼容?我很确定这与我的 POST 中的内容类型以及它与 multer 的关系有关。

谢谢你的时间!

Rav*_*ati 1

您可以使用主体解析器中间件

app.use(bodyParser());