我是新來的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