我确信这一定是重复的,但我现在必须阅读100个问题,但我仍然无法解决这个问题。
我在一个节点模块中有一个需要四个基础的函数:senderId
,field
,content
和response
。函数本身运行Mongoose Model Update以使用提供的内容更新指定的字段。代码如下:
module.exports = function(senderId, field, content, response) {
var errorMessage = "Sorry, I'm having problems processing your request. Please try again later.";
cemForm.update({ "senderId" : senderId }, {
field : content
}, function(err, res) {
if (err) {
console.log(err);
fb.textOnlyMessage(senderId, errorMessage);
} else {
fb.sendButtonMessage(senderId, response);
}
});
};
如果我像这样使用这个功能:
cemUpdate(event.sender.id, "issueType", cemQuestions.issue.buttons[0].title, cemQuestions.voiceSpecificIssue);
代码执行完美,我得到了正确的响应,但数据库没有更新。如果我用其内容(field
)替换对象键issueType
,则数据库会相应地更新。我已经尝试记录变量,我100%确定它是一个字符串,它是issueType
。
我错过了什么?
答案 0 :(得分:1)
这是因为您无法使用变量引用字段。为了解决这个问题......
module.exports = function(senderId, field, content, response) {
var errorMessage = "Sorry, I'm having problems processing your request. Please try again later.";
var updateObj = {};
updateobj[field] = content;
cemForm.update({ "senderId" : senderId }, updateObj, function(err, res) {
if (err) {
console.log(err);
fb.textOnlyMessage(senderId, errorMessage);
} else {
fb.sendButtonMessage(senderId, response);
}
});
};
未经测试,但希望能够正常工作。
仅供参考:这是一个没有Mongo等的简单例子here
答案 1 :(得分:1)
在ES6中,您可以使用computed property keys:
module.exports = function(senderId, field, content, response) {
var errorMessage = "Sorry, I'm having problems processing your request. Please try again later.";
cemForm.update({ "senderId" : senderId }, {
[field] : content
}, function(err, res) {
if (err) {
console.log(err);
fb.textOnlyMessage(senderId, errorMessage);
} else {
fb.sendButtonMessage(senderId, response);
}
});
};