Рендеринг отношений Mongoose с JSON - PullRequest
1 голос
/ 17 мая 2019

У меня есть две модели.

Как:

const mongoose = require('mongoose')
const Schema = mongoose.Schema

let Like = new Schema({
    value: {
        type: Number
    }
}, { timestamps: true })

module.exports = mongoose.model('Like', Like)

И

Доклад:

const mongoose = require('mongoose')
const Schema = mongoose.Schema

let Report = new Schema({
    title: {
        type: String
    },
    summary: {
        type: String
    },
    analysis: {
        type: String
    },
    source_title: {
        type: String
    },
    source_link: {
        type: String
    },
    author: {
        type: String
    },
    like: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'Like'
    },
    player: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'Player'
    }
}, { timestamps: true })

module.exports = mongoose.model('Report', Report)

У меня две цели:

  1. Я хочу иметь возможность отслеживать каждое подобное и связывать их с отчетом.
  2. Я хочу, чтобы на этом маршруте мог быть отчет как json.
const express = require('express')
const reportRoutes = express.Router()
let Report = require('../models/Report')


reportRoutes.get('/', async (req, res) => {

    try {

       const report = await Report.find()
        .populate({path: 'like'})
        .populate({
             path    : 'player',
             populate: [
                 { path: 'team' }
             ]
        })

        res.json(report)

    } catch (e) {
        res.status(500).send()
    }
})

reportRoutes.route('/:id').get(async (req, res) => {
    let id = req.params.id
    Report.findById(id, function(err, report){
        res.json(report)
    })
})

reportRoutes.route('/add').post(function(req, res){
    let report = new Report(req.body)
    report.save()
        .then(report => {
            res.status(200).json({'report': 'report added successfully!'})
        })
        .catch(err => {
            res.status(400).send('adding new report failed :(')
        })
})

reportRoutes.route('/update/:id').post(function(req, res){
    Report.findById(req.params.id, function(err, report) {
        if (!report)
            res.status(404).send('data is not found')
        else
            report.title = req.body.title
            report.desc = req.body.desc
            report.markdown = req.body.markdown

            report.save().then(report => {
                res.json('Report updated!!!')
            })
            .catch(err => {
                res.status(400).send('Update didnt work')
            })
    })
})

module.exports = reportRoutes

Способ, которым это в настоящее время настроено, работает, ОДНАКО, я чувствую, что есть определенное ограничение.

Каждый раз, когда я создаю лайк для отчета, мне также необходимо обновлять отчет, чтобы добавить идентификатор для конкретного лайка.

Полагаю, есть гораздо лучший способ сделать это. Мой опыт работы с Rails и Posgresql, поэтому Mongo / Mongoose немного меня отталкивает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...