Javascript 节点js更新值时返回null
我正在尝试使用express和NodeJSAPI调用更新一个值。这就是我的路线:Javascript 节点js更新值时返回null,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试使用express和NodeJSAPI调用更新一个值。这就是我的路线: 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,
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
}
});
这就是我的价值模式:
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更新值
- 使用较短的ID更新值将返回错误(如预期的那样)
- 使用较长的ID更新值将返回错误(如预期的那样)
- 当我尝试使用相同的长度ID更新值时,不管如何更改一两个数字-然后在“
”中返回nullpost
if (err) {
res.json('value with the entered ID does not exist');
console.log(err);
}
上面的代码只有在mongoose抛出错误时才会运行,就像您的情况一样
- 使用较短的ID更新值将返回错误(如预期的那样)
- 使用较长的ID更新值将返回错误(如预期的那样)
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.';
}
这只是一个可以根据代码修改和使用的函数示例。根据,如果使用new:true修饰符,如果mongo找不到您的文档,您将得到一个空结果
这不是一个bug,这是一个功能。Hi deeveeABC,你检查过你的收藏了吗,看是否有新的值插入其中?嘿。当我第一次添加该值时,该值可以很好地插入。但是,当我试图用不正确的ID修改它时,它不会在dbs中更新。如果ID是正确的,那么DBS中的值会正确更新,这是一个很好的解释,但是最后我有点困惑。我应该在我的router.put中的何处放置validate函数?您可以将它放在value.findByIdAndUpdate之前,如果收到错误,请发送您的响应消息。您是否介意编辑您的代码,以便将两者集成在一起?我不熟悉Node,我知道它使用回调来控制流,所以我想知道这看起来是如何集成在一起的。谢谢