2016-09-29 4 views
1

Ich habe ein Problem mit, was ich glaube, ist der Umfang einer Variablen in Mungo. Mein Code ist dies:Mungo (Express, Node, Mongo) Bereich Problem mit findOne()

var blogUserId; 
blogs.forEach(function(blog, index) { 
    User.findOne({'username': blog.username}, function(err, user) { 
    blogUserId = user._id; 
    console.log(blogUserId); 
    }); 
    console.log(blogUserId); 

    Blog.find({'title': blog.title}, function(err, blogs) { 
    if (!err && !blogs.length) { 
     console.log(blogUserId); 
     Blog.create({title: blog.title, author: blogUserId, body: blog.body, hidden: blog.hidden}); 
    } 
    if (err) { 
     console.log(err); 
    } 
    }); 
}); 

Dies ist Teil einer Seed-Datei für die Entwicklung gerade ist, aber ich bin ziemlich verwirrt, warum es nicht funktioniert würde. blogs ist nur ein Array von Objekten, die in die Sammlung geladen werden. Ich habe alle ähnlichen Antworten gesucht, aber ich habe keine richtige Antwort gefunden, die das erklären würde.

Antwort

1

Ihre blogUserId ist nicht festgelegt, wenn Ihre Blog.find() aufgerufen wird. Sie würden es anders Nest haben, so etwas wie diese:

var blogUserId; 
blogs.forEach(function(blog, index) { 
    User.findOne({'username': blog.username}, function(err, user) { 
    blogUserId = user._id; 
    console.log(blogUserId); 

    Blog.find({'title': blog.title}, function(err, blogs) { 
     if (!err && !blogs.length) { 
     console.log(blogUserId); 
     Blog.create({title: blog.title, author: blogUserId, body: blog.body, hidden: blog.hidden}); 
     } 
     if (err) { 
     console.log(err); 
     } 
    }); 

    }); 

}); 

Ich habe es nicht getestet, so bin ich nicht sicher, dass es keine weiteren Fehler im Code, sondern war auf jeden Fall ein Problem, das Sie fordern Blog.find erwartet, dass die blogUserId möglicherweise gesetzt wurde, bevor sie im Callback User.findOne gesetzt wurde.

Es kann mit benannten Rückrufen in einer lesbareren Weise geschrieben werden.

Wenn Sie in Node arbeiten, müssen Sie daran denken, dass Sie in einer asynchronen Umgebung arbeiten.

+0

Danke, das war es, die Struktur macht sowieso viel mehr Sinn –