Обновите данные в mongoDB с помощью Moongoose и AngularJs

0

Я использую NodeJS, AngularJS и MongoDB с мангустом, чтобы сделать сайт. У меня возникли проблемы с изменением объекта в mongoDB. Я следую учебнику, и все работает с примером. Но я пытаюсь с другой таблицей, имя новой таблицы - сообщение, и у меня проблема, когда я хочу изменить значение в таблице.

Вот моя модель:

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Todo = require('../models/Post.js');

    var PostSchema = new mongoose.Schema({
        nomReseau : String,
        corps : String,
        etat : String,
        section : String
    });
var Post = mongoose.model('PostReseaux', PostSchema);
module.exports = Post;

Здесь вы можете увидеть html:

 <ul>
    <li ng-repeat="post in posts ">
        <div class="card blue-grey darken-1">
            <div class="card-content white-text">
                <span class="card-title">Ticket</span>
                <p>
                    <a ng-show="!editing[$index]" href="#/{{post._id}}">{{post.corps}}</a>
                </p>
                <input type="checkbox" ng-model="post.etat" ng-change="update($index)">
                <button ng-show="!editing[$index]" ng-click="edit($index)">Editer</button>
                <button ng-show="!editing[$index]" ng-click="remove($index)">Supprimer</button>
                <button ng-show="!editing[$index]" ng-click="passer($index)">Passer</button>

                <input ng-show="editing[$index]" type="text" ng-model="post.corps">
                <button ng-show="editing[$index]" ng-click="update($index)">Confirmer</button>
                <button ng-show="editing[$index]" ng-click="cancel($index)">Annuler</button>
            </div>
        </div>
    </li>
</ul>
<a class="waves-effect waves-light btn" ng-click="save()">Créer ticket</a>

Это простой ng-repeat, который показывает каждую запись в моей базе данных, если я использую функции удаления или сохранения, все работает, я могу добавить или удалить сообщение в db.

Вот контроллер:

angular.module('app').controller('Feedback', ['$scope','$location','Posts', function($scope, $location, Posts) {
    $scope.title = 'Feedbacks';
    $(".button-collapse").sideNav();
    $scope.editing = [];
    $scope.posts= Posts.query();

    $scope.save = function(){
        if($scope.CorpsTicket.length < 1) return;
        var post = new Posts({ nomReseau: "Google+", corps : "test", etat : "aTraiter", section :"feedback" });

        post.$save(function(){
            $scope.posts.push(post);
        });
    }

    $scope.update = function(index){
        var post = $scope.posts[index].etat;
        Posts.update({id: post._id}, post);
        $scope.editing[index] = false;
    }

    $scope.passer = function(index){
        var post = $scope.posts[index];
        post.etat = "enCours";
        Posts.update({id: post._id}, post);
        $scope.editing[index] = false;
    }

    $scope.edit = function(index){
        $scope.editing[index] = angular.copy($scope.posts[index]);
    }

    $scope.cancel = function(index){
        $scope.posts[index] = angular.copy($scope.editing[index]);
        $scope.editing[index] = false;
    }

    $scope.remove = function(index){
        var post = $scope.posts[index];
        Posts.remove({id: post._id}, function(){
            $scope.posts.splice(index, 1);
        });
    }


}])

И вот js для бэкэнда:

var express = require('express');
var router = express.Router();

var mongoose = require('mongoose');
var Post = require('../models/Post.js');

/* GET /post listing. */
router.get('/', function(req, res, next) {
    Post.find(function (err, posts) {
        if (err) return next(err);
        res.json(posts);
    });
});


/* POST /post */
router.post('/', function(req, res, next) {
    Post.create(req.body, function (err, post) {
        if (err) return next(err);
        res.json(post);
});
});

/* GET /todos/id */
router.get('/:id', function(req, res, next) {
    Post.findById(req.params.id, function (err, post) {
        if (err) return next(err);
        res.json(post);
    });
});


/* PUT /todos/:id */
router.put('/:id', function(req, res, next) {
    Post.findByIdAndUpdate(req.params.id, req.body, function (err, post) {
        if (err) return next(err);
        res.json(post);
    });
});

/* DELETE /todos/:id */
router.delete('/:id', function(req, res, next) {
    Post.findByIdAndRemove(req.params.id, req.body, function (err, post) {
        if (err) return next(err);
        res.json(post);
    });
});

module.exports = router;

Но если я нажимаю на редактирование ($ index), и я изменяю значение post.corps, и я нажимаю на Confirmer изменение значения на экране, но не изменяю в базе данных.

Я думаю, что у меня проблема с функцией обновления, но я не знаю, что это такое. Как, скажем, я сделал учебник, и, когда таблица создана в учебнике, все работает, я могу изменить значение, но я получил эту ошибку с этой новой таблицей.

благодаря

  • 0
    Пожалуйста, предоставьте минимальный, полный и проверяемый пример .
  • 0
    Я не знаком с Angular, но похоже, что вы запрашиваете массив, как если бы это был хеш объекта. Сообщения будут выглядеть так: [{_id: 'id1', ...}, {_id: 'id2', ...}, {...}] но на самом деле вам нужно следующее: {id1: {_id: 'id1', ...}, id2: {_id: 'id2', ...}} . Angular делает это для вас автоматически?
Показать ещё 3 комментария
Теги:
mongoose

1 ответ

2
Лучший ответ

Здесь код, который вы $scope.update() в $scope.update():

var post = $scope.posts[index].etat; // note that you take just one field named "etat".
Posts.update({id: post._id}, post); // note that you use "id" instead of "_id".

Вы хотите обновить только поле etat? Тогда вам нужно сделать это вместо этого:

var etat = $scope.posts[index].etat;
Posts.update({ _id: post._id }, { "etat": etat });

Вы хотите обновить весь пост? Затем вам нужно передать весь пост, а не только поле etat:

var post = $scope.posts[index];
Posts.update({ _id: post._id }, post);

Обратите внимание, что ваши методы $scope.update() и $scope.passer() используют id вместо _id, поэтому вам также придется исправить это.

  • 0
    спасибо за это решение: var post = $ scope.posts [index]; Posts.update ({id: post._id}, post); Является ли решение, которое я использовал в первый раз, но я пробую его, и ничего не изменится на моей БД
  • 0
    @ VaudeyBaptiste, как я уже упоминал в своем ответе, вам также нужно изменить id на _id .
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню