【问题标题】:why findByIdAndUpdate() function is not working为什么 findByIdAndUpdate() 函数不起作用
【发布时间】:2021-08-26 08:24:56
【问题描述】:

我正在处理酒店项目,但此功能无法正常工作。 我已经完全检查了 req.query.id 并且 req.body 正在传递它的值。它不会返回任何错误,但它根本不起作用

import Room from "../models/Rooms";
room = await Room.findByIdAndUpdate(req.query.id, req.body, ({
      new: true,
      runValidators: true,
      useFindAndModify: false,
    }));

注意: typeof(req.body) 返回一个字符串,当我尝试使用 JSON.parse 将其转换为数组时,它返回错误

{
    "error": "Unexpected token } in JSON at position 54",
    "success": false
}
req.query.id: 60c0582ca7a06d54682a7a4b
req.query.body: {
    "pricePerNight":1000,
    "internet": false,
}

【问题讨论】:

  • 你能给我们看看 req.query.id 和 req.body
  • 是的,我已经更新了它们

标签: node.js mongoose next.js


【解决方案1】:

确保您是这样发出帖子请求的

fetch(url,{
     method: 'POST'
     headers:{ 'Content-Type': 'application/json'}
     body: JSON.stringify(data)
});

然后用 JSON.parse() 对正文进行分析。 如果您使用的是 express,请确保您使用的是 express.json() 像这样的中间件

const express = require("express")
const app = express();
app.use(express.json())

【讨论】:

  • 并尝试使用 findByIdAndUpdate() 方法,例如 geeksforgeeks.org/mongoose-findbyidandupdate-function
  • 嘿,我现在正在向邮递员发出发帖请求,我使用的是 next.js,所以不能使用 express,而是使用 next-connect
  • 对于正文,尽量不要使用 JSON.parse 我认为 next-connect 会为你做到这一点
【解决方案2】:

使用$set 更新文档。不能直接使用request来更新。

例子,

await Room.findByIdAndUpdate(req.query.id, {$set:req.body}, {
      new: true,
      runValidators: true,
      useFindAndModify: false,
    });

您的查询似乎无效。确保该对象有效。

【讨论】:

猜你喜欢
  • 2014-02-13
  • 2023-03-03
  • 2021-05-26
  • 2014-08-06
  • 2015-02-20
  • 2021-08-20
  • 2021-07-25
  • 2013-08-26
  • 2011-11-13
相关资源
最近更新 更多