전체 스택 항목 | 작은 책장 | 서버 -NodeJS + Koa2 기능 엄지 손가락을 달성

렌더링

그림 삽입 설명 여기

인터페이스 분석

위의 결과는 주로 책의 세부 정보 페이지처럼 진입 점에서,도에서 볼 수 있습니다.
이 책의 세부 정보 페이지에는 다음과 같은 기능을 가지고 있으며, 엄지 손가락은 관련이 있습니다 :

  • 상태 엄지 손가락을 가져 오기
  • 엄지 손가락
  • 엄지 손가락을 취소

그래서 이론적으로 엄지 손가락을 관련 인터페이스 프로젝트 3 개 이상이다.

모델 설계 엄지 손가락

이제 인터페이스의 수를 클리어, 그 다음 단계는 인터페이스를 설계하는 대응 model하여 model발생 테이블 like데이터 엄지 손가락 내에 저장.

그래서 데이터는 엄지 손가락이 존재해야?

이 간단한 분석 한 후, 엄지 손가락의 정보를 기록에만 다음과 같은 정보를 저장하는 데 필요합니다 :

  • 엄지 손가락 id
  • 서적 id
  • 사용자 id
  • created_at
  • deleted_at
  • updated_at

다음과 같이 그래서 마지막으로 데이터베이스 테이블에 생성 :
그림 삽입 설명 여기

상태 엄지 손가락을 가져 오기

책의 세부 정보 페이지의 책과 같은 상태에 따라 서로 다른 점을 보여줄 필요가 icon아이콘입니다.

어떻게 엄지 손가락 상태를 얻으려면?

그냥하고 싶은 like현재의 전송에보고 用户id하고 书籍id할 수 있습니다 검색 할 수 있습니다. 사용자의 책도 마찬가지, 데이터 및 부사장을 칭찬하지되었다는 점을 증명하는 데이터가 있습니다.

코드의 구체적인 실현 :

// 获取书籍的喜欢状态
    static async userLikeIt(uid, bid) {
        const like = await Like.findOne({
            where: {
                bkid: bid,
                uid: uid
            }
        })
        return like ? true : false
    }

상기 코드의 복귀 값에 의해, 추천은 사용자 리턴 포인트의 여부를 판정 true손가락 달리, 사용자가 손가락 책이 있는지 여부를 나타낸다.

엄지 손가락 달성

상태와 같은 점을 획득 한 후, 우리는 클릭 할 수있는 点赞 icon엄지 손가락을 달성하기 위해 또는 엄지 손가락 기능을 취소 할 수 있습니다.

실현의 점처럼 필요가 전류를 전달하는 用户 id, 书籍 id를 통해 데이터 포인트가 테이블의 데이터에 결과를 칭찬 한 다음 저장, 데이터가 있는지 데이터베이스 쿼리. 그리고 프롬프트 성공 엄지 손가락, 반환 된 데이터의 형식은 다음입니다 :

{"msg":"ok","error_code":0,"request":"POST /v1/like"}

칭찬의 사용자의 관점이 책의 칭찬과 연결된 지점의 수 있기 때문에, 추가 작업을 할 수있는 단계가있다.
즉, 사용자의 엄지 손가락 또는 비추천, 책 엄지 손가락 도서 테이블의 수는 해당 증가 또는 감소이다.

의사 코드는 다음과 같이 :

static async like(uid,bkid){
        const like = await Like.findOne({
            where: {
                uid: uid,
                bkid: bkid
            }
        })
       
        if (like) {
            throw new global.errs.NotFound("喜欢失败", NotFound.LIKE_FAIL)
        }
        return sequelize.transaction(async t => {
            await Like.create({
                uid,
                bkid
            }, {
                transaction: t
            })
            const book = await Book.detail(bkid)
            await book.increment('like_count', {
                by: 1,
                transaction: t
            })
        })
    }

사용하여 데이터베이스에 위의 코드 事务기능을. 구체적인 事务설명은이 문서를 참조 할 수있다 javaweb 연구 요약 (서른여덟) - 트랜잭션

이 문제를 방지하기 위해 트랜잭션을 사용하여 데이터의 정확성을 동시에보다는 리드에서 작동 할 수 있기 때문에이 책과 같은 점의 수입니다.

엄지 손가락을 달성하기 취소

엄지 손가락이 실제로 인터페이스, 인터페이스를 사용하고 다음 취소 엄지 손가락 또는 엄지 손가락을 구별 적절한 치료를 만들기 위해 카테고리를 추가 할 수 있습니다, 기능 엄지 손가락을 취소합니다. 여기 내 요점은 잠비아의 인터페이스를 취소하도록 설계되었습니다.

엄지 손가락을 취소 기능을 전달해야 用户 id하고 书籍 id두 개의에 따라 id데이터베이스를 쿼리합니다. 쿼리 데이터 like 表的数据 destroybook 表的数据 decrement캔.

의사 코드는 다음과 같습니다 :

 static async disLike(uid,bid){
        let like = await Like.findOne({
            uid: uid,
            bkid: bid
        })
        if (!like) {
            throw new global.errs.NotFound("不喜欢失败", NotFound.UN_LIKE_FAIL)
        }
        // Favor 表 favor 记录
        return sequelize.transaction(async t => {
            await like.destroy({
                force: true,
                transaction: t
            })
            const book = await Book.detail(bid)
            await book.decrement('like_count', {
                by: 1,
                transaction: t
            })
        })
    }

위이 소개합니다.


대중의 관심의 스캔 코드 번호는 빛을냅니다.

그림 삽입 설명 여기

추천

출처www.cnblogs.com/gdragon/p/12003991.html