使用查询和几个条件时出现Javascript / Logic问题。

时间:2016-11-24 20:59:36

标签: javascript adonis.js

所以我使用adonis为图像托管网站构建一个非常基本的后端,例如reddit或imgur。我试图让用户能够对帖子进行投票,但限制每个用户每个帖子只投票一次,我的一个控制器出现问题。

这是我的控制器类文件:

'use strict'

const Vote = use('App/Model/Vote')
const Post = use('App/Model/Post')


class VoteController {
  * create (request, response) {
let currentUser = request.authUser
let postId = request.param('post_id')
let data = {}
data.user_id = currentUser.id
data.post_id = postId

let voteCheck = yield Vote.query()
  .where({'post_id': postId,
          'user_id': currentUser.id })
console.log(voteCheck)

if (voteCheck) {
  response.status(401).json({error: "User can only cast 1 vote per post."})
} else {
  let addVote = yield Vote.create(data)
  yield addVote.save();
  let post = yield Post.findBy('id', data.post_id)
  let votes = post.vote_count;
  if (votes === null ) {
    votes = 1;
  } else {
    votes++;
  }
  post.vote_count = votes;
  yield post.save()

  response.status(202).json([post, addVote]);
  }
 }

}
  

module.exports = VoteController

我一直在玩不同的条件组合。我的主要问题是变量'voteCheck'。基本上如果用户投票,它会在我的'votes'表中创建一个新列,用于存储authUser的id和post的id。我在条件之前有一个查询,它搜索匹配该条件的预先存在的投票,如果存在,则抛出错误。如果不是(否则),它会创建一个新的投票,并在帖子'vote_count'中加1。后者工作得很好,但我相信我的条件逻辑有问题,因为即使对于尚未投票的用户,我目前也会收到错误。有什么建议?非常感谢大家阅读!

1 个答案:

答案 0 :(得分:0)

您忘记执行查询链。将.fetch()放在查询的末尾。

let voteCheck = yield Vote.query()
  .where({'post_id': postId,
          'user_id': currentUser.id })
  .fetch()