我得到了一个这样的错误: uncaughtException TypeError: cb不是一个函数,我认为这个错误是由回调错误引起的,但我不知道为什么会有这个错误。
app.put('/badge/student_badge/:id', upload, (req, res, next) => {
const name = req.body.name;
let data = {
name: name
}
badger.updatePersonBadge({
id: req.params.id
}, data, (err) => {
if (err) return next(err);
res.status(201).json({
message: 'Post updated successfully!'
});
});
});
function updatePersonBadge(options, cb) {
schemas.badger.then(b => {
b.findById({
_id: options.id
}, (err, resp) => {
if (err) return cb(err);
if (!resp) return cb("no badge found");
name = options.name;
title = resp.title;
points = resp.points;
updateBadge(name, title, points, cb);
cb(null, resp);
})
})
}
function updateBadge(name, title, points, cb) {
const dateCreated = new Date(),
dateUpdated = dateCreated;
registerSchemas.personModel.then(p => {
p.findOneAndUpdate({
name: name
}, {
$push: {
badges: [{
title: title,
points: points,
dateCreated: dateCreated,
dateUpdated: dateUpdated
}]
}
}, (err, resp) => {
if (err) return cb(err);
if (!resp) return cb("no person found");
})
})
}发布于 2020-04-19 05:33:06
您没有传递cb参数,并且如果它是可选的(至少看起来应该是),则函数会缺少一条if语句:
updatePersonBadge(options, cb) { // << cb (callback) argument expected
// ...
cb(null, resp); // cb called therefore not optional (Its needed)如果您像使用updatePersonBadge(aaa)而不是updatePersonBadge(aaa, myCallbackFn)那样使用它,那么cb()是undefined,但表示为函数调用--这是不存在的。
您可以将其设置为可选(如果是这样的话):
//...
if(cb) cb(null, resp); // call the cb function if cb argument exists或者如果你想说得更具体一些:
//...
if(cb && typeof cb === 'function') cb(null, resp);传递的不是函数,而是data
badger.updatePersonBadge({}, data, errFn);发布于 2020-04-19 05:36:44
我假设这就是您调用updatePersonBadge的地方。如果是,那么你将回调作为第三个参数传递,你必须正确使用它们。
badger.updatePersonBadge(
{
id: req.params.id
},
data,
(err) => {
if (err) return next(err);
res.status(201).json({
message: 'Post updated successfully!'
});
});发布于 2020-04-19 05:37:20
在这个例子中,问题是参数不匹配,而不是回调,而是发送数据
app.put('/badge/student_badge/:id', upload, (req, res, next) => {
const name = req.body.name;
let data = {
name: name
}
badger.updatePersonBadge({id:req.params.id}, data, (err)=>{. -- three arguments passed
if (err) return next(err);
res.status(201).json({
message: 'Post updated successfully!'
});
});});
在函数定义中,您只定义了2个参数。它应该是3个参数/该特定场景应该得到验证。
https://stackoverflow.com/questions/61296312
复制相似问题