我正在尝试使用express和node js API调用来更新值。这就是我的路线:
if ( isset($_POST['image_url'] ) && '' !== $_POST['image_url'] ) {
update_option( $_POST['image_url'], 'image_url' );
}
这就是我的价值架构:
var express = require('express');
var router = express.Router();
router.put('/updateValue/:id', function(req, res, next) {
value.findByIdAndUpdate(req.params.id, req.body, {
new: true
}, function(err, post) {
if (err) {
res.json('value with the entered ID does not exist');
console.log(err);
} else {
res.json(post);
}
});
});
我可以添加一个效果很好的值。
什么有效:
什么行不通:
var value = new mongoose.Schema({
milliseconds: {
type: Number
}
});
'它是否也不会返回错误?由于ID不正确,值未更新?
任何解释都将不胜感激!
答案 0 :(得分:0)
if (err) {
res.json('value with the entered ID does not exist');
console.log(err);
}
上面的代码只会在你的情况下像mongoose throw error
时运行使用较短的ID更新值会返回错误(如预期的那样)
使用较长的ID更新值会返回错误(如预期的那样)
在控制台中,您收到以下消息:强制转换为ObjectId值
但是当您发送具有正确格式的objectId但具有数据库中不存在的值的请求时, 更新 查询将返回null。
在更新时,您首先找到该文档,然后对其进行更新,但如果文档不存在则不是错误。
您可以像这样执行代码:
router.put('/updateValue/:id', function(req, res, next) {
value.findByIdAndUpdate(req.params.id, req.body, {
new: true
}, function(err, post) {
if (err) {
res.json(err);
console.log(err);
} else {
if(post){
res.json(post);
}else{
res.json('value with the entered ID does not exist');
}
}
});
});
在我的建议中,我们在请求中的所有内容必须在进入数据库调用之前进行验证。因为从mongoose获取错误不是编写api的好方法。
那么,在你的情况下你可以验证req.params.id是否是一个ObjectId
验证示例:
var mongoose = require('mongoose');
function validate(req.params.id){
var data=req.params.id;
return mongoose.Types.ObjectId.isValid(data) ? null : 'Should be an object id.';
}
这只是您可以根据代码修改和使用它的功能示例。
答案 1 :(得分:-1)
根据mongoose doc,如果使用new:true修饰符,如果mongo找不到您的文档,则会得到null结果。
这不是一个错误,它是一个功能。