我是新来的Node.js,我有问题试图拒绝回调地狱。 现在我正在开发一个在mongo数据库中注册用户的endpoitn,我遇到的问题是,如果我在使用它们的地方对模块化函数进行模块化,则会失去对某些变量的访问权限。避免回调地狱丢失变量范围
代码:
工作回调地狱:
var mongoose = require('mongoose'),
dbserver = 'mongodb://localhost/',
dbname = 'authdb';
mongoose.connect(dbserver + dbname);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
console.log('connectet to mongo db: ' + dbname);
})
userModel = require('./user.js');
function singIn (req, res){
var email = req.body.email,
name = req.body.name,
secondName = req.body.secondName,
pass = req.body.pass,
bday = req.body.bday;
var user = new userModel.user();
user.Email = email;
user.Name = name;
user.SecondName = secondName;
user.Pass.Hash = pass;
user.BirthDate = bday;
db.model('user').find({Email : email},function (err,foundUsers){
if(!err && foundUsers.length === 0){
user.save(function (err, users){
if(err){
console.log(err);
res.send("Not inserted");
}else{
console.log(user);
console.log('registered!');
res.send("OKish");
}
});
}else{
console.log(err);
console.log(foundUsers);
res.send("Not inserted");
}
});
};
exports.singIn = singIn;
不在这里工作模块化
var mongoose = require('mongoose'),
dbserver = 'mongodb://localhost/',
dbname = 'authdb';
mongoose.connect(dbserver + dbname);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
console.log('connectet to mongo db: ' + dbname);
})
userModel = require('./user.js');
function singIn (req, res){
var email = req.body.email,
name = req.body.name,
secondName = req.body.secondName,
pass = req.body.pass,
bday = req.body.bday;
var user = new userModel.user();
user.Email = email;
user.Name = name;
user.SecondName = secondName;
user.Pass.Hash = pass;
user.BirthDate = bday;
db.model('user').find({Email : email},addUser);
};
function saveUser(err, users){
if(err){
console.log(err);
res.send("Not inserted");
}else{
console.log(user);
console.log('registered!');
res.send("OKish");
}
}
function addUser(err,foundUsers){
if(!err && foundUsers.length === 0){
user.save(SaveUser);
}else{
console.log(err);
console.log(foundUsers);
res.send("Not inserted");
}
}
exports.singIn = singIn;
的问题是,在第二个片段,我不能存取权限变量资源和用户在函数addUser和saveUser中。
有没有办法让这两个变量在函数的范围内,或者我必须忍受这次的回调地狱?
谢谢!
但是这会失去对模块化的关注,至于其他可能使用saveUser和addUser方法的操作,您将不得不重新定义它们。 – webduvet
@ lombausch可能,但这些函数似乎专用于'signIn'。 – JohnnyHK
我试过了,它在fisrt实例中工作,但是我无法访问从addUser调用的saveUser函数。我也尝试在addUser中声明saveUser,但它不起作用。你有痛风吗? – user2113500