使用Node / Express + Mongo制作API。
我正在写一些单元测试和我观察,如果我尝试获得/profile/1
了_id=1
(我让默认蒙戈把ID,所以我不能有_id=1
)我得到这个错误
MongooseError: Cast to ObjectId failed for value "1" at path "_id"
我以为我会有一个空对象User。
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->表示错误返回。
我读过猫鼬的文档,但是我并没有真正看到他们用不同的方法解释返回值。
问题是“ 1”不是有效的猫鼬对象ID。因此,它正在尝试比较不同的类型。
尝试将其强制转换为对象ID,如下所示:
userId = mongoose.Types.ObjectId(userId)
然后运行查询
User.findById(userId, "-password", (err, user) => { .... });
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句