繁体   English   中英

如果这个 nodejs rest api 没问题并且它的 mongoose 结构和 mongodb 数据,为什么我从 mongoDB 得到空值?

[英]Why am I getting empty value from mongoDB if this nodejs rest api is ok and its mongoose structure and mongodb data?

这个 API 获取一个请求参数,它被过滤并传递给一个 User mongoose 模型,如下面的代码所示,正在查询 mongodb 并返回空。 如果一切正常,为什么会发生这种情况?

routes.route('/user')
    .get( (req,res) => {
        //const query = 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,我使用 postman 或 webbrowser 使用这个 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);

以及 mongo 中的数据:

{"_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 时,它应该返回 mongo 数据(如前所示)

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

似乎您在做错误的查询,请尝试使用以下代码:

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 async/await:

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);
    }
});

希望这可以帮助 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM