Почему я получаю пустое значение от mongoDB, если api nodejs rest в порядке, его структура mongoose и данные mongodb? - PullRequest
1 голос
/ 02 июля 2019

Этот API получает параметр запроса, который фильтруется и передается в модель User mongoose, как показано в коде ниже, запрашивает mongodb и возвращает пустое значение.Почему это происходит, если все в порядке?

routes.route('/user')
    .get( (req,res) => {
        //const quuery = req.query;
        //const {query} = req;
        const {query} = req;

        if (req.query.UserName){
            query.UserName = req.query.UserName;
            console.log("ok 2 " + query.UserName);
        }      

        User.find({UserName:query.UserName}, (err, data)=> {
            if (err){
                console.log("not ok");
                return res.send(err);
            }
            else {
                console.log("ok: " + data);                
                return res.json(data);
            }

        });
    });

Для тестирования моего API я использую почтальон или веб-браузер, используя этот URL: http://localhost:4000/api/user?UserName=smed

При проверке журнала вы можете видеть, что онвыводит параметр и данные с пустым значением.

Это модель Мангуста:

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

let UserSchema = new Schema({
    UserId: {
        type: Number
    },
    PersonId: {
        type: Number
    },
    UserName: {
        type: String,
        unique: true
    },
    Deactivated: {
        type: Boolean
    },
    Password: {
        type: String
    },
    SysCreationDate: {
        type: Date
    },
    LastLoginDate: {
        type: Date
    }

},{collection:'User'});

module.exports = mongoose.model('User', UserSchema);

А данные в монго:

{"_id":{"$oid":"5d1037acde2b6feb37938db6"},"User":[{"UserId":
{"$numberInt":"1"},"PersonId":{"$numberInt":"1"},"UserName":"smed","Deactivated":false,"Password":"1234","SysCreationDate":"2016-06-23T21:42:31+07:00"},{"UserId":{"$numberInt":"2"},"PersonId":{"$numberInt":"2"},"UserName":"eper","Deactivated":false,"Password":"1234","SysCreationDate":"2016-06-23T22:42:31+07:00"}]}

у меня естьпроверил это на машине Windows 10 и Ubuntu 18.xx, и я получаю ту же ошибку.Это мои зависимости:

"dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "mongoose": "^5.6.2"
  }

И NodeJS: v8.10.0

Ответ - пустой массив в json.Он должен запросить коллекцию User и вернуть объект, содержащийся, когда свойство UserName имеет значение «smed», параметр, который отправляется в запросе: http://localhost:4000/api/user?UserName=smed

Он должен возвращать данные монго (показанные ранее), когда UserName = smed

{"_id":{"$oid":"5d1037acde2b6feb37938db6"},"User":[{"UserId":{"$numberInt":"1"},"PersonId":{"$numberInt":"1"},"UserName":"smed","Deactivated":false,"Password":"1234","SysCreationDate":"2016-06-23T21:42:31+07:00"}]}

1 Ответ

0 голосов
/ 03 июля 2019

похоже, что вы делаете неправильный запрос, попробуйте следующий код:

routes.route('/user').get((req, res) => {
    const query = (req.query.userName) ? {
        User: {
            $elemMatch: {
                $eq: req.query.userName
            }
        }
    } : {};
    User.find(query, (err, data) => {
        if (err) {
            console.log("Error is: ", err);
            return res.send(err);
        } else {
            console.log("Data is: " + data);
            return res.json(data);
        }

    });
});

или с асинхронным / ожидающим es6:

routes.route('/user').get(async (req, res) => {
    try {
        const query = (req.query.userName) ? {
            User: {
                $elemMatch: {
                    $eq: req.query.userName
                }
            }
        } : {};
        const data = await User.find(query).lean();
        console.log("Data is: " + data);
        return res.json(data);
    } catch (err) {
        console.log("Error is: ", err);
        return res.send(err);
    }
});

Надеюсь, это поможет:)

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