(мангуст) метод put не работает - PullRequest
0 голосов
/ 24 июня 2018

Я создаю веб-API с помощью mongoose.

Работа POST и GET, но я не знаю, как реализовать метод PUT в mongoose.

Вот что я создал:

board.js

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const config = require('../config/database');

const BoardSchema = mongoose.Schema({
    _id: {
        type: String
    },
    position: {
        type: [String]
    }
});

const Board = module.exports = mongoose.model('boards', BoardSchema);

module.exports.getBoardById = function (id, callback)
{
    Board.findById(id, callback);
}

module.exports.addBoard = function (newBoard, callback)
{
    newBoard.save(callback);
}

module.exports.updateBoard = function (newBoard, callback)
{
    newBoard.save(callback);
}

users.js

router.put('/board/:id', (req, res, next) =>
{
    let newBoard = new Board({
        _id: req.params.id,
        position: req.body.position
    });

    Board.updateBoard(newBoard, (err, board) =>
    {
        if (err)
        {
            res.json({ newBoard: newBoard, success: false, msg: "Failed to update board" });
        }
        else
        {
            res.json({ newBoard: newBoard, success: true, msg: "Board added" });
        }
    });
});;

Здесь, в board.js,Я создал методы для добавления новой доски и обновления на существующую доску..addBoard работает правильно, и я могу проверить его с помощью Почтальона.Но .updateBoard добавляет данные, когда данные не существуют, но не обновляет никакие данные и возвращает false в качестве ответа (так же, как это делает POST).Есть ли способ заставить метод PUT работать?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

Пожалуйста, дайте мне знать, если это работает для вас! Я хочу познакомить вас с http://mongoosejs.com/docs/api.html#findbyidandupdate_findByIdAndUpdate

router.put('/board/:id', (req, res) => {
  const {id: _id} = req.params // Assigning id to _id which is a es6 feature. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
  const {position} = req.body

  const newBoard = {
    _id,
    position
  }

  Board.findByIdAndUpdate(
    _id,
    newBoard,
    (err, updatedBoard) => {
      if (err) {
        res.json({
          newBoard,
          success: false,
          msg: 'Failed to update board'
        })
      } else {
        res.json({newBoard, success: true, msg: 'Board added'})
      }
    }
  )
})
0 голосов
/ 24 июня 2018

Поскольку вы используете req.body, я думаю, что вы пытаетесь вызвать запрос пут из формы (иногда это происходит и с запросами AJAX). Для этого используйте method-overide . И установите заголовок xhr, как указано в документации. Это обязательно сработает.

0 голосов
/ 24 июня 2018

почему вы используете метод сохранения при обновлении?

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const config = require('../config/database');

const BoardSchema = mongoose.Schema({
    _id: {
        type: String
    },
    position: {
        type: [String]
    }
});

const Board = module.exports = mongoose.model('boards', BoardSchema);

module.exports.getBoardById = function (id, callback)
{
    Board.findById(id, callback);
}

module.exports.addBoard = function (newBoard, callback)
{
    newBoard.save(callback);
}

module.exports.updateBoard = function (condition, update, callback)
{
    Board.update(condition,update,callback);
}

в контроллере

router.put('/board/:id', (req, res, next) =>
{
    let newBoard = new Board({
        _id: req.params.id,
        position: req.body.position
    });

    Board.updateBoard({ _id: req.params.id } ,newBoard, (err, board) =>
    {
        if (err)
        {
            res.json({ newBoard: newBoard, success: false, msg: "Failed to update board" });
        }
        else
        {
            res.json({ newBoard: newBoard, success: true, msg: "Board added" });
        }
    });
});

попробуй это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...