Javascript 节点/Express未将更新的公司信息保存到数据库
我是Node/Express的新手,正在尝试实现更新公司信息的块。我有许多Javascript 节点/Express未将更新的公司信息保存到数据库,javascript,database,node.js,express,Javascript,Database,Node.js,Express,我是Node/Express的新手,正在尝试实现更新公司信息的块。我有许多console.log语句跟踪整个块中的变量,在最后一行保存之前,一切似乎都运行得很好。我到底做错了什么 // Edit company metric information editMetrics: function(link, form, cb) { Companies.findOne({ permalink: link }, function (err, company) { if (err)
console.log
语句跟踪整个块中的变量,在最后一行保存之前,一切似乎都运行得很好。我到底做错了什么
// Edit company metric information
editMetrics: function(link, form, cb) {
Companies.findOne({ permalink: link }, function (err, company) {
if (err) return done(err);
// Iterate through form fields
for(var field in form) {
console.log(field); // Looks great
if(typeof(company.operational[field]) !== 'undefined') {
company.operational[field].unshift({
timestamp: new Date(),
value: form[field]
});
}
if(typeof(company.user_metrics[field]) !== 'undefined') {
company.user_metrics[field].unshift({
timestamp: new Date(),
value: form[field]
});
}
if(typeof(company.economics[field]) !== 'undefined') {
company.economics[field].unshift({
timestamp: new Date(),
value: form[field]
});
}
}
console.log(company); // Looks great
// Save & redirect to updated profile
company.save(cb()); // For some reason this isn't saving
});
},
回调:
CompanyModel.editMetrics(link, req.body, cb = function(error, result) {
res.redirect('/portfolio/' + link);
});
问题是最后一行:
company.save(cb())代码>
应该是:
company.save(cb)代码>
基本上,当需要将函数指针传递给save函数时,您正在执行回调并将结果传递给save函数
还要确保回调签名与函数(错误,结果)
的节点约定相匹配,以便获得所需的结果值。什么类型的公司
?你能发布相关代码吗?另外,cb()
返回什么?我们在这里遗漏了很多信息。这似乎是对如何将回调作为参数传递给另一个异步函数的典型误解。尝试company.save(cb)
而不是company.save(cb())
并告诉我们它是否仍然不起作用,或者您是否不理解差异。不起作用/不理解差异抱歉。公司是一个庞大的对象。抱歉,我将尝试添加更多信息…因此,我根据您的答案在原始问题中添加了更多信息。我将最后一行更改为company.save(cb)
,并在上面发布了我的cb()
函数。删除回调的cb=部分,只使用匿名函数。我删除了cb=
,但似乎没有任何更改。好的,然后尝试在回调中记录错误和结果值,看看是否发生了错误。