Пн goose проверка ссылочного идентификатора - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок ie в пн goose и express. Пытался найти ответ на мой вопрос, но не повезло. У меня есть следующие схемы:

var Schema = mongoose.Schema;

var Project= new Schema ({
    name: {
        type: String,
        required: true,
        min: 5,
        max: 255

    },

    description: {
        type: String,
        min: 5,
        max: 500

    },
    status: {
        type: String,
        min: 5,
        max: 255
    },
    priority: {
        type: String,
        min: 5,
        max: 255
    },
    progress: {
        type: String,
        min: 5,
        max: 255
    } ,
    _user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
});

module.exports= mongoose.model('Project', Project);
var Schema = mongoose.Schema;

var IssueSchema= new Schema ({

    description: {
        type: String,
        min: 5,
        max: 500,
        required: true

    },
    status: {
        type: String,
        min: 5,
        max: 255,
        default: "Open"
    },
    priority: {
        type: String,
        min: 5,
        max: 255
    },
    deadline:{
        type: Date
    },

    _project: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Project'
    }
});



module.exports= mongoose.model('Issue', IssueSchema);

Я работаю над созданием промежуточного ПО Issue для route / projectId / Issues и имею код

const bodyParser = require('body-parser');
const Issue = require ('../models/Issue');
var Project = require ('../models/Project');
const { handleError,ErrorHandler } = require('../helpers/error');

exports.createIssue = (req, res,next) => {
    Project.findById(req.params.id);
        if (req.params.id!= null) {
            console.log('Project found');
            const {description, deadline, priority, status} = req.body;
            var issue = new Issue({  
                description,
                deadline,
                status,
                priority,
                _project:req.params.id
             });
        issue.save();
        res.status(200).send("Issue created!")}
        else {
            err = new Error('Project ' + req.params.id + ' not found');
            err.status = 404;
            return next(err);
        }
    };

И это не работает :( То, чего я пытаюсь добиться, это проверить, существует ли projecID, перед сохранением документа «Issue». Есть идеи, как это реализовать?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Project.findById принимает обратный вызов с параметрами error и document

Project.findById(req.params.id, (error, project) => {
  console.log(project) // project will be null if not found.
  // handle project !== null here
})
0 голосов
/ 30 апреля 2020

Вы проверяете, был ли идентификатор передан в параметры:

if (req.params.id!= null)

Но это не говорит вам, есть ли проект, связанный с этим идентификатором. Вам необходимо проверить возвращаемое значение Project.findById (req.params.id). Например:

let result = Project.findById(req.params.id)
if(!result.length) console.log('No project found")

В этом случае я почти уверен, что переменная результата будет массивом, однако, это также может быть объект, так что console.log (result) и посмотрим, что вы получите. Затем напишите вам условное заявление на основе этого.

Также, если вы хотите отлавливать какие-либо ошибки, вам нужно использовать блок try / catch вместо if / else.

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