87,907
社区成员
发帖
与我相关
我的任务
分享
Ids.getId = function (tablename, callback) {
mongodb.open(function (err, db) {
if(err){
return callback(err);
}
db.collection('ids', function (err, collection) {
if(err){
return callback(err);
}
collection.findAndModify({"tablename":tablename}, [], {$inc:{'id':1}}, {new:true, upsert:true},function(err,doc){
mongodb.close();
if(err){
return callback(err);
}
/**
* doc:
*
* { lastErrorObject: { updatedExisting: true, n: 1 },
value: { _id: 57679a6e81c676eb4e32d869, tablename: 'bg_user', id: 21 },
ok: 1 }
*/
console.log(doc.value.id);
//return doc.value.id;
callback(doc);
});
});
});
};
app.post('/reg',function(req,res){
var username = req.body.name, password = req.body.password, password_re = req.body['password-repeat'];
if (password != password_re) {
req.flash('error', '两次输入的密码不一致!');
return res.redirect('/reg');
}
var email = req.body.email;
var userType = 2;//普通会员
var userId = Ids.getId('bg_user').id;
console.log('userId:'+userId);
var md5 = crypto.createHash('md5'), password = md5
.update(password).digest('hex');
var newUser = new User({
username : username,
password : password,
userType : userType,
email : email,
userId : userId
});
User.get(newUser.username, function(err, user) {
........
TypeError: callback is not a function
at E:\work\node\workspace\young\module\ids.js:84:15
at handleCallback (E:\work\node\workspace\young\node_modules\mongodb\lib\utils.js:96:12)
at Collection.find (E:\work\node\workspace\young\node_modules\mongodb\lib\collection.js:354:44)
at E:\work\node\workspace\young\module\ids.js:76:18
at handleCallback (E:\work\node\workspace\young\node_modules\mongodb\lib\utils.js:96:12)
at E:\work\node\workspace\young\node_modules\mongodb\lib\collection.js:1006:5
at commandCallback (E:\work\node\workspace\young\node_modules\mongodb-core\lib\topologies\server.js:936:9)
at Callbacks.emit (E:\work\node\workspace\young\node_modules\mongodb-core\lib\topologies\server.js:116:3)
at null.messageHandler (E:\work\node\workspace\young\node_modules\mongodb-core\lib\topologies\server.js:282:23)
at Socket.<anonymous> (E:\work\node\workspace\young\node_modules\mongodb-core\lib\connection\connection.js:273:22)
Program node app.js exited with code 1
var userId = Ids.getId('bg_user').id;
2,3年没关注node了,快忘差不多了。
就从代码层面上看,你上面这个getId方法,接受2个参数:tablename,callback
在这个方法里,你直接调用了callback方法,但是很明显,你使用的时候没有传入第二个参数callback。
所以你在getId方法里得判断callback是否是undefined
Ids.getId = function (tablename, callback) {
mongodb.open(function (err, db) {
if(err){
return callback && callback(err); // 加入callback是否为undefind的判断
}
db.collection('ids', function (err, collection) {
if(err){
return callback && callback(err); // 加入callback是否为undefind的判断
}
collection.findAndModify({"tablename":tablename}, [], {$inc:{'id':1}}, {new:true, upsert:true},function(err,doc){
mongodb.close();
if(err){
return callback && callback(err); // 加入callback是否为undefind的判断
}
/**
* doc:
*
* { lastErrorObject: { updatedExisting: true, n: 1 },
value: { _id: 57679a6e81c676eb4e32d869, tablename: 'bg_user', id: 21 },
ok: 1 }
*/
console.log(doc.value.id);
//return doc.value.id;
callback && callback(doc); // 加入callback是否为undefind的判断
});
});
});
};
最后,在我看来就算加上了callback判断,你这个getId方法也不行,这个方法没有返回值,你怎么可以Ids.getId('bg_user').id呢?
在我看来你下面调用的时候的代码都应该是放到getId的callback这个回调里。