2015-10-10 5 views
0

У меня проблемы с моей головой около $resource. Я пытаюсь применить метод удаления для удаления записи базы данных MongoDB, когда пользователь нажимает кнопку удаления. Я использую Angular 1.4 с Express и Mongoose.

Вот мой HTML:

<body ng-app="polls" ng-controller="PollsCtrl"> 
    Polls: 

    <ul> 
     <li ng-repeat="question in questions"> 
      {{ question.questionName }} 
      <button ng-click="deletePoll(question._id, $index)">Delete</button> 
     </li> 

    </ul> 

...

Вот контроллер на стороне клиента:

"use strict"; 

var app = angular.module('polls', ['ngResource']); 
app.controller('PollsCtrl', function ($scope, $resource) { 

    var Poll = $resource('/api/polls'); 
    var PollID = $resource('/api/polls/:pollID'); 

    Poll.query(function (results) { 
     $scope.questions = results; 
    }); 

    $scope.questions = []; 
    $scope.questionName = ''; 

    $scope.addPoll = function() { 
     var poll = new Poll(); 
     poll.questionName = $scope.questionName; 
     poll.$save(function (result) { 
      $scope.questions.push(result); 
      $scope.questionName = ''; 
     }); 
    }; 

    $scope.deletePoll = function (id, index) { 
     var poll = new PollID(); 
     poll.$remove(function() { 
      $scope.questions.splice(index, 1); 
     }); 
    }; 
}); 

вот файл-сервер, включая remove метод:

var express = require('express'); 
var path = require('path'); 
var mongoose = require('mongoose'); 
var bodyParser = require('body-parser'); 

var app = express(); 

mongoose.connect('mongodb://localhost/poll-app'); 

app.use('/controllers', express.static(__dirname + '/controllers')); 
app.use('/bower_components', express.static(__dirname + '/bower_components')); 

app.get('/', function (req, res) { 
    res.sendFile(path.join(__dirname + '/index.html')); 
}); 

app.get('/polls', function (req, res) { 
    res.sendFile(path.join(__dirname + '/polls.html')); 
}); 

app.get('/add-poll', function (req, res) { 
    res.sendFile(path.join(__dirname + '/add-poll.html')); 
}); 

var pollSchema = new mongoose.Schema({questionName: String}); 
var Poll = mongoose.model('Poll', pollSchema); 

var creater = function (req, res) { 
    var poll = new Poll(req.body); 
    poll.save(function (err, result) { 
     if (err) throw err; 
     res.json(result); 
    }) 
}; 

var list = function (req, res) { 
    Poll.find({}, function (err, result) { 
     if (err) throw err; 
     res.json(result); 
    }); 
}; 

var remove = function (req, res) { 
    console.log(req.params); 
    var poll = new Poll(req.body); 
    poll.remove({_id: req.params}, function (err, result) { 
     if (err) throw err; 
     res.json(result); 
    }); 
}; 

app.use(bodyParser.urlencoded({extended: false})); 
app.use(bodyParser.json()); 

app.post('/api/polls', creater); 
app.get('/api/polls', list); 
app.delete('/api/polls/:pollID', remove); 

app.listen(3000, function() { 
    console.log('HI'); 
}); 

Я уверен, ошибка в методе remove() сервера. Когда я проверю это, я на самом деле получаю:

DELETE http://localhost:3000/api/polls 404 (Not Found) 

как будто оно не направляется туда, где я его хочу.

+0

вы должны загрузить свой объект первым перед удалением в нем что-то вроде этого: var user = User.get ({userId: 123}, function() { user.abc = true; пользователь. $ save(); }); – hic1086

+0

@ hic1086 Я обновил свой вопрос с большим количеством моего кода, чтобы дать ему контекст – alanbuchanan

ответ

1
poll.$remove({pollID:id}, function() { 
    $scope.questions.splice(index, 1); 
}) 
+1

Не могли бы вы добавить некоторые объяснения, чтобы идти вместе с вашим фрагментом кода? –

+0

вы передаете id для ресурса $, который будет использоваться в delete –

1

в вашем случае, я думаю, что лучше использовать $ Http:

$http.delete('/api/polls/pollID/'+req.params). 

Таким образом, вы не должны получить объект, прежде чем удалить

Смежные вопросы