繁体   English   中英

更新 MongoDB 文档中的字段值正在将字符串转换为 object

[英]Updating field value in a MongoDB document is turning string into object

我目前正在使用 React TypeScript、MongoDB 和 Express.js 制作一个项目。 我正在尝试更新我的 MongoDB 文档中的字段值,它应该是一个字符串,但它会自动将其转换为 object。 以前有人遇到过这个问题吗? 如果是这样,你是如何解决的?

它应该是怎样的:

character_name: "string"

它是如何更新的:

character_name: {
     "string": ""
}

我什至在控制台中记录了它以向我显示数据的类型,它说它是一个字符串,所以我不知道它可以做什么?

后端路由:

routes.put("/change-name", async (req, res) => {

const name = req.body as string;

try {
    const client = await getClient();
    const result = await client.db().collection<Account>('accounts').updateOne({ username: "AndrewDamas" }, {$set: {character_name: name}});
    if (result.modifiedCount === 0) {
        res.status(404).json({ message: "Not Found" });
    } else {
        res.json(name);
    }
} catch (err) {
    console.error("FAIL", err);
    res.status(500).json({ message: "Internal Server Error" });
}
});

前端的服务代码:

export function changeName(name: string){
     return axios.put(`${baseUrl}/change-name`, name)
     .then(res => res.data);
}

以及我如何在我的代码中使用它:

function saveData(){
     console.log(ourCharacterName);
     changeName(ourCharacterName);
}

任何帮助将不胜感激。 谢谢。

问题

每次使用as时,都意味着出现问题。

const name = req.body as string;

你的身体不是真正的string ,你的身体是 object:

{
  "string": ""
}

解决方案

const { string: name } = req.body;

提出请求。 当以正文形式发送数据时,它将以 json 的形式到达您的服务器中。 所以你可以解构它或者在你的路由方法中使用点符号。

return axios.put(`${baseUrl}/change-name`, {name:name})

从主体中解构变量

const {name} = req.body;

更新文档

... {$set: {character_name: name}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM