【发布时间】:2021-10-01 15:01:22
【问题描述】:
我正在尝试对我的快速服务器进行 API 调用,以根据位置 ID 获取在同一地点工作的员工。但是,API 调用在命令行界面中运行时只返回一个空数组。
员工模型
module.exports = mongoose => {
var schema = mongoose.Schema(
{
first_name: String,
last_name: String,
address: {
housenumber: Number,
street: String,
city: String,
zip: Number,
country: String
},
phone: Number,
mobile: Number,
email: String,
enrollment_date: Date,
staff_id: Number,
location: { type : mongoose.Schema.ObjectId, ref : 'location' },
department: String,
function: String,
active: Boolean
},
{ timestamps: true }
);
schema.method("toJSON", function() {
const { __v, _id, ...object } = this.toObject();
object.id = _id;
return object;
});
const Employee = mongoose.model("employee", schema);
return Employee;
};
API 的员工路由
router.get("/location/:location_id", employees.findAllByLocation);
员工控制器处理上述调用
exports.findAllByLocation = (req, res) => {
Employee.find({ location: req.params.location_id })
.then(data => {
res.send(data);
})
.catch(err => {
res.status(500).send({
message:
err.message || "Some error occurred while retrieving Employees."
});
});
};
要测试的虚拟数据库数据
Postman API 调用结果
但是,尝试在命令行界面中找到具有该位置 ID 的用户确实有效并提供了所需的输出。
[
所以不知何故它搞砸了,我似乎无法弄清楚它为什么会这样做。我做了一些研究,发现它可能与作为 ObjectId 的引用的位置有关。所以我尝试将 req.params.location_id 包装到 ObjectId 可能会修复它,但没有奏效。
让这个工作的最佳方法是什么?
【问题讨论】:
-
该路由器的 app.use() 是什么?
-
app.use("/api/employees", router);该方法有点用,如果我忽略按位置查找的条件,它会显示所有员工的列表。它只是以某种方式无法正确处理位置 ID。 -
@m1ch14l 您已将
location定义为架构级别的ObjectId,但显然它在数据库中存储为String(来自屏幕截图)?尝试使用location更改数据库条目以更正ObjectId,然后进行测试。 -
@ambianBeing 我现在觉得很傻,我在数据库中更改了它,现在它运行良好。非常感谢!
-
@m1ch14l 非常欢迎。它一直发生在我们的开发者身上????
标签: javascript node.js angular mongodb express