NodeJS, Пн goose: запрос не работает - PullRequest
0 голосов
/ 17 марта 2020

В моем проекте я использую mon goose и хочу использовать запрос на выборку для выбора указанных c полей из моего JSON файла. В документации mon goose сказано, что правильная форма такова:

// selecting the `name` and `occupation` fields
query.select('name occupation');

Во время фильтрации я разделяю поля с помощью ,, но после замены их на (пробел)

Вот мой фрагмент кода:

//@desc     Get all bootcamps
//@route    GET /api/v1/bootcamps
//@access   Public

exports.getBootcamps = async (req, res, next) => {
    try {
        let query;

        //Copy req.query
        const reqQuery = { ...req.query };

        //Fields to exclude
        const removeFields = ['select'];

        //Loop over the removeFields and delete them from reqQuery
        removeFields.forEach(param => delete reqQuery[param]);

        //Create query string
        let queryStr = JSON.stringify(req.query);

        //Create operators($gt, $gte, etc)
        const regex = /\b(gt|gte|lt|lte|in)\b/g;
        queryStr = queryStr.replace(regex, match => `$${match}`);

        //Finding resouce
        query = Bootcamp.find(JSON.parse(queryStr));

        //Select Fields

        if (req.query.select) {
            const fields = req.query.select.split(',').join(' ');
            console.log(fields);
            query = query.select(fields);
        }

        //Executing query
        const bootcamps = await query;

        res.status(200).json({
            succes: true,
            count: bootcamps.length,
            data: bootcamps
        });
    } catch (err) {
        return res.status(404).json({ succes: false });
    }
};

Так что после console.log(fields); я получаю правильную форму, которая: name description, потому что в URL фильтр был

{{URL}}?select=name,description

Но после того, как я передаю это query = query.select(fields);, я получаю пустой массив с ответом 200 ...

Мой JSON файл:

{
        "_id": "5d713995b721c3bb38c1f5d0",
        "name": "Devworks Bootcamp",
        "description": "Devworks is a full stack JavaScript Bootcamp located in the heart of Boston that focuses on the technologies you need to get a high paying job as a web developer",
        "website": "https://devworks.com",
        "phone": "(111) 111-1111",
        "email": "enroll@devworks.com",
        "address": "233 Bay State Rd Boston MA 02215",
        "careers": ["Web Development", "UI/UX", "Business"],
        "housing": true,
        "jobAssistance": true,
        "jobGuarantee": false,
        "acceptGi": true
    }

Редактировать: я пытался написать запрос следующим образом:

const bootcamps = await query.select('name description');

И, конечно, на этот раз не использовал фильтрацию и ЭТО РАБОТАЛО . Я просто не понимаю этого прямо сейчас ... И я вернул то, что хотел

{
    "succes": true,
    "count": 4,
    "data": [
        {
            "_id": "5d713a66ec8f2b88b8f830b8",
            "name": "ModernTech Bootcamp",
            "description": "ModernTech has one goal, and that is to make you a rockstar developer and/or designer with a six figure salary. We teach both development and UI/UX"
        },
        {
            "_id": "5d725a1b7b292f5f8ceff788",
            "name": "Devcentral Bootcamp",
            "description": "Is coding your passion? Codemasters will give you the skills and the tools to become the best developer possible. We specialize in front end and full stack web development"
        },
        {
            "_id": "5d713995b721c3bb38c1f5d0",
            "name": "Devworks Bootcamp",
            "description": "Devworks is a full stack JavaScript Bootcamp located in the heart of Boston that focuses on the technologies you need to get a high paying job as a web developer"
        },
        {
            "_id": "5d725a037b292f5f8ceff787",
            "name": "Codemasters",
            "description": "Is coding your passion? Codemasters will give you the skills and the tools to become the best developer possible. We specialize in full stack web development and data science"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...