Node.js MERN应用程序中使用Router.put和mongoDB进行强制转换时出现问题

Node.js MERN应用程序中使用Router.put和mongoDB进行强制转换时出现问题,node.js,reactjs,mongodb,express,axios,Node.js,Reactjs,Mongodb,Express,Axios,我想连接router.put,它将更新切换按钮中的布尔值(isOn),但首先我想尝试它是如何工作的,现在我面临这个问题 const express = require("express"); const router = express.Router(); const Buttons = require('../../models/Buttons'); // GET buttons // This request works perfect router.get('/', (req,res)

我想连接router.put,它将更新切换按钮中的布尔值(isOn),但首先我想尝试它是如何工作的,现在我面临这个问题

const express = require("express");
const router = express.Router();
const Buttons = require('../../models/Buttons');

// GET buttons
// This request works perfect
router.get('/', (req,res) => {
 Buttons.find()
.sort({name: 1})
.then(buttons => res.json(buttons))
});

// PUT buttons
// This one doesnt work at all
router.put('/:name', function(req,res,next) {
    Buttons.findByIdAndUpdate({name: req.params.name},         
 req.body).then(function(){
    Buttons.findOne({name: req.params.name}).then(function(buttons){
        res.send(buttons);
    });
});
 });

 module.exports = router;
按钮的模型只有名称:String,required:true和isOn:Boolean,required:true,数据库中的数据如下所示:

你能告诉我我做错了什么吗

按钮代码:

const mongoose = require('mongoose');
const Schema = mongoose.Schema

const buttonSchema = new Schema ({
name: {
type: String,
required: true
},
isOn: {
type: Boolean,
required: true
}
});

 module.exports = Buttons = mongoose.model("buttons", buttonSchema);

请在数据库中添加您必须更新的id

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...
发生此错误的原因是findByIdAndUpdate需要我们要更新的对象的id,以便显示ObjectId错误。所以,从前端传递id,并在后端使用它来更新微粒数据

步骤1:可以为更新名称创建新端点

router.put('/update-name', function(req,res,next) {
  //here you can access req.body data comes from front-end
 // id = req.body.id and name = req.body.name then use it in your 
 Buttons.findByIdAndUpdate(id, { name : name }, {new: true}, function(err, model) {...

}

第2步:尝试此端点/更新名称,并在正文中从邮递员传递数据

当您要通过匹配文档的
\u id
更新文档时,只能使用
findbyiandupdate

如果您希望通过任何其他属性(如您的案例中的
name
)匹配文档,可以使用
findOneAndUpdate

这样写你的查询

router.put('/:name', function(req,res,next) {
    Buttons.findOneAndUpdate({name: req.params.name},         
 req.body).then(function(){
    Buttons.findOne({name: req.params.name}).then(function(buttons){
        res.send(buttons);
    });
});
 });

希望这有帮助

请在此处添加您的按钮模式已添加按钮模式!:)在调用mongodb时,需要使用try-catch将其添加到async/Wait。既然你解决了它,请求会处理,你会发现是否出现问题。我已经在路由器中添加了异步/等待。但是问题是sameI做的,它仍然抛出了错误。如果你感到困惑,那么添加代码,我会向你解释。是的,当然,给我几秒钟我试过这个,它给了我一个身体区域作为回应,就像你说的,但我不能在那里键入任何东西是的,这就是我要找的!非常感谢。