使用Node/Express + Mongo制作一个API。为什么猫鼬findById返回一个错误,如果没有发现ID
我正在写一些单元测试,我发现,如果我试图让/profile/1
为_id=1
(我让蒙戈把ID默认情况下,所以我不能有_id=1
)我得到这个错误
MongooseError: Cast to ObjectId failed for value "1" at path "_id"
我以为我会有一个空的对象用户。
function getProfile(req, res) {
const userId = req.params.userId
User.findById(userId, "-password", (err, user) => {
if (err) {
console.log(err);
res.status(400)
res.json({
success: false,
err
})
res.end()
return
}
if (!user) {
res.status(404)
res.json({
success: false,
message: `Cannot find an User with the userId: ${userId}`
})
res.end()
return
}
res.json({
success: true,
user: user
})
res.end()
return
})
}
我的测试:
describe('Test /profile route',() => {
it('shouldn\'t find Joe Doe\'s profile with a wrong ID\n', (done) => {
chai.request(server)
.get(`/profile/1`)
.end((err, res) => {
expect(res).to.have.status(404)
done()
})
})
我想我有一个错误404(第二个如果,我知道这是不正确的代码错误,只是我看到一个快速的方法在我的测试去),但我得到了400 - >意思是一个错误是回报。
我阅读猫鼬的文档,我真的没有看到他们用不同的方法解释返回值。
正在达到哪个部分你的代码抛出的错误? – brandonscript
在我看来,问题是类型 - 看起来像是一个Int,但期望一个ObjectId。你在使用TypeScript吗? – brandonscript
我忘了把我的测试代码抱歉。不,我没有使用TypeScript。 (我听说过它,但我仍然没有去读它的说实话) – Ragnar