我正在构建一个小应用程序,通过用户创建的挑战来跟踪阅读进度。默认情况下,新的阅读挑战具有“已完成”属性,默认布尔值为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;
};
谢谢你的帮助!