我收到这样的错误: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");
})
})
}
答案 0 :(得分:0)
您没有传递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);
答案 1 :(得分:0)
我假设这是您调用updatePersonBadge的地方。如果是,那么您要将回调作为第三个参数传递,则必须正确使用它们。
badger.updatePersonBadge(
{
id: req.params.id
},
data,
(err) => {
if (err) return next(err);
res.status(201).json({
message: 'Post updated successfully!'
});
});
答案 2 :(得分:0)
在此示例中,问题是参数不匹配,您可以代替回调发送数据
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个参数/应该验证特定方案。