对于模型 XXX 的路径 XXX 处的值 XXX,转换为 ObjectId 失败
Cast to ObjectId failed for value XXX at path XXX for model XXX
我有一个简单的 用户模型 和一个名为 bio 的 属性,如下所示:
const userSchema = new mongoose.Schema{
bio:{
type: String,
max: 150,
default: "Welcome to my linktree!"
}
}
我有一个编辑生物的功能如下:
exports.editBio = async (req, res) => {
User.findByIdAndUpdate({_id: req.user._id}, {bio: req.body}, (err,data) => {
if(err){
res.json(err)
}else{
res.json(`Bio updated`)
}
})
}
但是,我一直收到错误消息:
{
"stringValue": "\"bio\"",
"valueType": "string",
"kind": "ObjectId",
"value": "bio",
"path": "_id",
"reason": {},
"name": "CastError",
"message": "Cast to ObjectId failed for value \"bio\" (type string) at path \"_id\" for model \"User\""
}
我该如何解决这个问题?
这是我问题的答案:-
之前的路线顺序是:
router.put('/:id/edit/:linkId', isLoggedIn, isAuthenticated, editLink)
router.put('/:id/edit/bio', isLoggedIn, isAuthenticated, editBio)
我先调换了这些路由的顺序(在网上搜索了一些类似的问题后,似乎可行)。新的路线顺序:
router.put('/:id/edit/bio', isLoggedIn, isAuthenticated, editBio)
router.put('/:id/edit/:linkId', isLoggedIn, isAuthenticated, editLink)
然后我编辑了我的 editBio 函数(代码如下):
exports.editBio = async (req, res) => {
var input = JSON.stringify(req.body);
var fields = input.split('"');
var newBio = fields[3];
if(newBio.length > 150){
return res.json(`Bio cannot be more than 150 characters`)
}else{
try {
await User.findByIdAndUpdate(req.user._id, { bio: newBio });
res.json(`Bio updated`)
}catch (err) {
res.json(err)
}
}
}
我有一个简单的 用户模型 和一个名为 bio 的 属性,如下所示:
const userSchema = new mongoose.Schema{
bio:{
type: String,
max: 150,
default: "Welcome to my linktree!"
}
}
我有一个编辑生物的功能如下:
exports.editBio = async (req, res) => {
User.findByIdAndUpdate({_id: req.user._id}, {bio: req.body}, (err,data) => {
if(err){
res.json(err)
}else{
res.json(`Bio updated`)
}
})
}
但是,我一直收到错误消息:
{
"stringValue": "\"bio\"",
"valueType": "string",
"kind": "ObjectId",
"value": "bio",
"path": "_id",
"reason": {},
"name": "CastError",
"message": "Cast to ObjectId failed for value \"bio\" (type string) at path \"_id\" for model \"User\""
}
我该如何解决这个问题?
这是我问题的答案:-
之前的路线顺序是:
router.put('/:id/edit/:linkId', isLoggedIn, isAuthenticated, editLink)
router.put('/:id/edit/bio', isLoggedIn, isAuthenticated, editBio)
我先调换了这些路由的顺序(在网上搜索了一些类似的问题后,似乎可行)。新的路线顺序:
router.put('/:id/edit/bio', isLoggedIn, isAuthenticated, editBio)
router.put('/:id/edit/:linkId', isLoggedIn, isAuthenticated, editLink)
然后我编辑了我的 editBio 函数(代码如下):
exports.editBio = async (req, res) => {
var input = JSON.stringify(req.body);
var fields = input.split('"');
var newBio = fields[3];
if(newBio.length > 150){
return res.json(`Bio cannot be more than 150 characters`)
}else{
try {
await User.findByIdAndUpdate(req.user._id, { bio: newBio });
res.json(`Bio updated`)
}catch (err) {
res.json(err)
}
}
}