我在Node js和Mongodb中创建了一个基本的REST api。我想使用Find with Custom Parameter更新值,例如name
。我能够让用户使用自定义GET方法,但它不能在PUT / POST方法中工作。
以下是架构:
{
name:String,
value:Number
}
以下是代码:
// v1 / api / users /:name -Update
api.put('/users/:name',(req,res)=>{
Users.find({name:req.params.name},(err,user)=>{
if(err){
res.send(err);
}
console.log(req.body.name);
console.log(req.body.value);
user.value= req.body.value;
user.save(err => {
if(err){
res.send(err);
}
res.json({message:'Updated '});
});
});
});
现在举例来说,如果mongoDb
有"name":"sam"
,我使用`localhost:3000 / v1 / api / users / sam``和正文
1。{"value":300}
,我收到错误
无法设置属性' name'未定义的
2.当我记录第一个错误时,我发现没有定义名称给了我错误。所以我使用了这个{"name":"sam","value":300}
,现在错误是用户。保存不是一个功能。
使用FindById
进行更新是有效的,但在客户端的情况下,用户无法从数据库中获取id,因此我尝试了上述方法。
请帮帮我
答案 0 :(得分:0)
尝试使用此代码:
api.put('/users/:name', (req, res) => {
Users.find({
name: req.params.name
}, (err, user) => {
if (err) {
res.send(err);
}
if (!user) {
res.send({
message: 'User not found'
});
}
user.value = req.body.value;
user.save(err => {
if (err) {
res.send(err);
}
res.json({
message: 'Updated '
});
});
});
});
答案 1 :(得分:0)
错误是user.save不是一个函数。
这是因为find()
会返回[]
个匹配的文档。
根据docs,
findOne()它是一个可能为null的单个文档,find()是一个文档列表,
即使只有{"name":"sam"}
的文档,您也会获得[{"name":"sam"}]
。正在调用导致错误的数组save()
。
'use strict';
api.put('/users/:name', (req, res) => {
Users.findOne({
name: req.params.name
}, (err, user) => {
if (err) {
return res.send(err);
}
if (user === null) {
return res.send({
msg: 'No matching user with name sam'
});
}
console.log(req.body.name);
console.log(req.body.value);
user.value = req.body.value;
user.save(err => {
if (err) {
res.send(err);
}
res.json({message: 'Updated '});
});
});
});
您还可以通过获取find()
结果的第一个元素,然后对其进行操作来解决此问题。