MEAN CRUD中的未定义错误

时间:2013-12-03 17:59:56

标签: javascript node.js mongodb angularjs crud

{ text: undefined,
  done: false,
  _id: 529e16025f5222dc36000002,
  __v: 0 }
PUT /api/todos/529e16025f5222dc36000002 200 142ms - 68b

在尝试对我的简单CRUD待办事项列表进行更新时,我一直收到此错误消息。当我提交更新时,更改不会出现在屏幕上,虽然看起来它是200.不知道采取什么步骤,以便我没有得到这个“未定义”错误,所以我可以让更新显示在屏幕上。

编辑:包含更多代码

这是后端节点代码:

app.put('/api/todos/:_id', function(req, res) {
    Todo.findById(req.params._id, function(err, todos){
    todos.text = req.body.text;
    console.log(todos);
    todos.save(function() {
            if (!err) {
                res.send(todos);
            } else if (err) {
                res.send(err);
            }
            Todo.find(function(err, todos) {
                if (err)
                    res.send(err);
                res.json(todos);
            });
        });
    });
});

这是Angular前端代码:

$scope.updateTodo = function(id) {
    $scope.newItem = prompt("Please enter your new item:", "");
    $http.put('/api/todos/' + id, {formData: $scope.newItem}).success(function(data) {
        $scope.todos = data;
    });

    $http.get('/api/todos').success(function(data) {
        $scope.todos = data;
    });
};

1 个答案:

答案 0 :(得分:0)

我认为这是因为:

$http.put('/api/todos/' + id, { formData: $scope.newItem} )
                                ^^^^^^^^

您在请求中传递了一个formData参数,但在Express代码中,您使用此参数:

req.body.text

试试这个:

req.body.formData.text

或者根本不使用formData参数并直接传递$scope.newItem

除此之外,你的Express代码有点乱:它可能会发回多个响应,而不会检查save上的错误(正如@PaulGray也指出的那样)。