在没有用户输入的情况下触发POST请求

时间:2018-06-17 00:02:26

标签: mongodb reactjs express post

我正在构建一个小应用程序,通过用户创建的挑战来跟踪阅读进度。默认情况下,新的阅读挑战具有“已完成”属性,默认布尔值为false。如果完成百分比为100%,则通过将读取的页数除以书籍的页数并将结果乘以100来确定挑战。

我想知道是否有可能(或被认为是良好做法)通过发出一个不是由用户输入而是由内部逻辑触发的POST请求来将“已完成”属性的值更改为true。我的申请(即通过确定挑战完成百分比是否为100%的函数)。

我目前可以使用Postman模拟请求,但该工具提供了一个表单,通过该表单我可以发送“completed”:true。当我在我的应用程序中尝试该功能时(将读取的页数设置为书籍的页数),该属性不会设置为true。

以下是我的代码的相关部分:

API路线:

JsonValue

确定挑战是否完成的功能:

router
  .post("/:challengeId", passport.authenticate("jwt", { session: false }), (req, res) => {
    Challenge
      .findOne({ _id: req.params.challengeId })
      .then(challenge => {
        challenge.completed = req.body.completed;
        challenge
          .save()
          .then(challenge => {
            res.status(200).json({ message: messages.successEditedChallenge, challenge });
          })
          .catch(err => console.log(err));
      })
      .catch(err => console.log(err));
  });

POST请求:

export const completionPercentage = (challenge, sessions) => {
  const pagesReadEntries = [];
  let completionPercentage;

  sessions.map(session => pagesReadEntries.push(session.numberOfPagesRead));
  pagesReadTotal = pagesReadEntries.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
  completionPercentage = Math.round(pagesReadTotal / challenge.book.numberOfPages * 100);

  if(completionPercentage > 0 && completionPercentage < 1) completionPercentage = 1;
  if(completionPercentage > 100) {
    completionPercentage = 100;
    markChallengeAsCompleted(challenge._id);
  }

  return completionPercentage;
};

谢谢你的帮助!

0 个答案:

没有答案