2017-01-06 13 views
0

Я новичок в узле, и я пытаюсь сохранить что-то в монго через мангуст. Я хочу вернуть false, если save имеет ошибку (например, есть пользователь с текущим именем). Проблема в том, что порядок console.logs 1: 2: 6: 7: 3: 4: 5 Есть ли способ, который я могу вызвать adduser синхронно?Могу ли я получить model.save(), чтобы иметь возвращаемое значение?

module.exports.addUser = function(username,password){ 
console.log(1); 
var newUser = User({ 
    username:username, 
    password:password 
}); 
console.log(2); 
newUser.save(function(err,prod,numeffect){ 
    if (err){ 

     console.log(err); 
    } 
    if (numeffect === 1){ 
     console.log(3); 
     console.log("num effect = "+numeffect); 

    } 
    console.log(4); 
    console.log(prod); 

}).then(function(doc){console.log(5)}); 
console.log(6); 
} 

mongoose.addUser(req.body.username,req.body.password); 
    console.log(7); 

ответ

1

Вы должны не делать их синхронно, или вы будете блокировать весь свой узел нить.

Вместо этого вы должны вернуть обещание или простую функцию с обратным вызовом. (Как mongoose saving one, обратите внимание, что мангуст поддерживает)

Вы можете сделать return newUser.save()

Тогда вы бы запустить его как addUser.then(). Кроме того, вы можете отказаться от module.exports = function() и выполнить module.exports свою функцию с помощью callback или promise.

0

NodeJs - однопоточный процесс, и вы не должны блокировать его синхронными вызовами.

Вы должны передать функцию обратного вызова для выполнения любых действий, когда вы получите ответ от mongodb.

Это значительный переход от вызова и блокировки к обратному вызову при входе в NodeJs.