1

我正在使用 react-big-calendar 并且我想要一个 findById (用于操作每个事件以进行编辑和删除)和一个 findByUser (用于数据库的持久性)。

控制器

const db = require("../models");

module.exports = {
findAll: function(req, res) {
    db.Event
    .find()
    .then(dbModel => {

        res.json(dbModel)
    })
    .catch(err => res.status(422).json(err));
},
findByUser: function(req, res) {
    db.Event
    .find({user: req.params.user})
    .then(dbModel => res.json(dbModel))
    .catch(err => res.status(422).json(err));
},
findById: function(req, res) {
    db.Event
    .findById(req.params.id)
    .then(dbModel => res.json(dbModel))
    .catch(err => res.status(422).json(err));
},
create: function(req, res) {
    db.Event
    .create(req.body)
    .then(dbModel => res.json(dbModel))
    .catch(err => res.status(422).json(err));
},
update: function(req, res) {
    db.Event
    .findOneAndUpdate({ "_id": req.params.id }, 
        {
            "title": req.body.title,
            "start": req.body.start,
            "end": req.body.end,
            "description": req.body.description
        },
        { new: true }
    )
    .then(dbModel => res.json(dbModel))
    .catch(err => res.status(422).json(err))
},
remove: function(req, res) {
    db.Event
    .findById({ _id: req.params.id })
    .then(dbModel => dbModel.remove())
    .then(dbModel => res.json(dbModel))
    .catch(err => res.status(422).json(err));
}
}

路线

const router = require("express").Router();
const calendarController = require("../../controllers/calendarController");
const passport = require("passport");

router.route("/")
  .get(calendarController.findAll)
  .post(calendarController.create);

router.route("/:user")
  .get(calendarController.findByUser);

router.route("/:id")
  .get(calendarController.findById)
  .put(calendarController.update)
  .delete(calendarController.remove);


module.exports = router;

此时,findById 返回一个空数组。如果我交换用户路线和 id 路线的顺序,它 findById 然后工作,但用户然后返回一个空值。这里发生了什么事?我可以分别通过 ID 和用户 ID 调用文档吗?

4

1 回答 1

1

实际上,您的两条路线都在这里/:user/:id不能有所作为...先找到,先执行,而其他路线将压倒一切

摆脱这种情况的唯一方法是更改​​路线的名称

router.route("/user/:user")  // change the route name here
  .get(calendarController.findByUser);

router.route("/:id")
  .get(calendarController.findById)
  .put(calendarController.update)
  .delete(calendarController.remove);
于 2018-05-14T17:57:18.747 回答