【问题标题】:MEAN.JS: Filter in mongoose middlewareMEAN.JS:猫鼬中间件中的过滤器
【发布时间】:2015-01-18 21:47:36
【问题描述】:

这是我在 MEAN JS 后端控制器中的代码:

exports.list = function(req, res) {
    // configure the filter using req params
    var filters = {
        filters : {
            optional : {
                contains : req.query.filter
            }
        }
    };

    var sort = {
        asc : {
            desc: 'name'
        }
    };

    Province
        .find()
        .filter(filters)
        .order(sort)
        .exec(function (err, provinces) {
            if (err) {
                return res.status(400).send({
                    message: errorHandler.getErrorMessage(err)
                });
            } else {
                res.jsonp(provinces);
            }
        });


};

请求:

http://localhost:3000/provinces?filter[姓名]=巴塞罗那省

按预期返回过滤结果:

[
    {
        "_id": "54ba72903f51d73c4aff6da6",
        "community": "54ba689f5fdfbdea292b8737",
        "location": "{lat: '41.386290', lng: '2.184988', zoom: '11'}",
        "__v": 0,
        "name": "provincia de Barcelona"
    }
]

当我使用不同的属性时,过滤器停止工作。示例:

http://localhost:3000/provinces?filters[社区]=54ba69755fdfbdea292b8738

返回这个:

{
    "message": ""
}

console.log(err) 返回这个:

[CastError: Cast to ObjectId failed for value "/54ba689f5fdfbdea292b8737/i" at path "community"]
  message: 'Cast to ObjectId failed for value "/54ba689f5fdfbdea292b8737/i" at path "community"',
  name: 'CastError',
  type: 'ObjectId',
  value: /54ba689f5fdfbdea292b8737/i,
  path: 'community' }

原始文件:

[
    {
        "_id": "54ba72903f51d73c4aff6da6",
        "community": "54ba689f5fdfbdea292b8737",
        "location": "{lat: '41.386290', lng: '2.184988', zoom: '11'}",
        "__v": 0,
        "name": "provincia de Barcelona"
    },
    {
        "_id": "54ba73c33f51d73c4aff6da7",
        "community": "54ba69755fdfbdea292b8738",
        "location": "{lat: '42.4298846', lng: '-8.644620199999963', zoom: '11'}",
        "__v": 0,
        "name": "provincia de Pontevedra"
    }
]

【问题讨论】:

  • “不起作用”是什么意思?您收到状态码 400 了吗?您的描述显示了一些架构,但没有显示初始数据 - 您希望返回什么数据?
  • 我没有收到状态码 400。返回全部,而不仅仅是过滤的段。字段名称有效,但如果我更改为社区(另一个字段)则不起作用。谢谢!
  • 我把初始数据放到post里了。

标签: express mongoose middleware meanjs


【解决方案1】:

也许不是最好的方法,但有效:)

exports.list = function(req, res) {

	var community = {community: ''};
	community.community = mongoose.Types.ObjectId(req.query.filter.community);
	console.log(community);

	var filters = {
		filters : {
			optional : {
				contains : community
			}
		}
	};



	var sort = {
		asc : {
			desc: 'name'
		}
	};

	Province
		.find()
		.filter(filters)
		.order(sort)
		.exec(function (err, provinces) {
			console.log(err);
			if (err) {
				return res.status(400).send({
					message: errorHandler.getErrorMessage(err)
				});
			} else {
				res.jsonp(provinces);
			}
		});


};

请求:

http://localhost:3000/provinces?filter[community]=54ba689f5fdfbdea292b8737

结果:

[
    {
        "_id": "54ba72903f51d73c4aff6da6",
        "community": "54ba689f5fdfbdea292b8737",
        "location": "{lat: '41.386290', lng: '2.184988', zoom: '11'}",
        "__v": 0,
        "name": "provincia de Barcelona"
    }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2018-03-19
    • 2020-04-12
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多