我正在制作投票系统,投票是通过链接完成的。在我的index.js中,我获得了所需的值并将其放入变量中。“类型”变量代表需要更新的mongodb中的字段,我将其放在变量中,因为它取决于单击哪个链接。
现在在$ set函数中,他们需要db字段和一个新值,因为我都使用变量,但是我的“ type”变量不起作用。当我转到mongodb时,会创建一个名为“ type”的新表。如何解决呢?
router.get('/vote/:Id/:Value/:Type', function(req, res) {
var db = req.db;
var id = req.params.Id;
var type = req.params.Type;
var value = parseInt(req.params.Value);
var newValue = value + 1;
var collection = db.get('games');
collection.update(
{"_id" : id},
{$set: {type: newValue}}
, function (err, doc) {
if (err) {
res.send("There was a problem");
}
else {
res.location("../../../admin");
res.redirect("../../../admin");
}
});
});
在javascript中,您不能将变量用作对象常量中的属性名称,而这就是您要尝试做的事情。
试试吧:
var a = 'someProperty';
var o = {a: 'somePropertyValue'};
console.log(o);
将打印{ a: 'somePropertyValue' }
不会{someProperty:'somePropertyValue}
。
如果javascript允许以对象文字符号引用属性名称中的变量,则它必须摆脱未加引号的名称,因为它们会造成歧义。应该a
用作属性的值还是应该作为变量的值a
?
尝试使用事先创建的对象创建更新对象文字,而不使用对象文字符号,因此您的代码如下所示:
router.get('/vote/:Id/:Value/:Type', function(req, res) {
var db = req.db;
var id = req.params.Id;
var type = req.params.Type;
var value = parseInt(req.params.Value);
var newValue = value + 1;
var collection = db.get('games');
//We create the $set property/value pair using property assignment, not the object literal
var updateVal = {};
updateVal[type] = newValue;
collection.update(
{"_id" : id},
{$set: updateVal} //use it here
, function (err, doc) {
if (err) {
res.send("There was a problem");
}
else {
res.location("../../../admin");
res.redirect("../../../admin");
}
}
);
});
更好的是,$set
事先构造整个操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句