I am building a small node.js website with a user interface that features a dropdown with a list of countries.
Previously the list of countries was hard coded in a json file that I would read:
exports.countries = require('./json/countries.json');
Then I realized I shouldn't hard code it like that when I can do a distinct query to the the list from the mongodb database.
db.collection.distinct('c', {}, function(err, data) {
  // something
});
But then there's the question of how to extract the value of the data variable in that callback function. I discovered that this works:
db.collection.distinct('c', {}, function(err, data) {
  if (err) {
    throw Error('mongodb problem - unable to load distinct values');
  } else {
    exports.countries = data;
  }
});
I am new to node.js and this seems fishy to me. Is this OK code? Is it better do this with generators or promises? If I wanted to use generators or promises to do this, how would I do that?
The end result where this is used is in a template. ref.countries is the actual list of countries using my fishy code. If I had a Promise instead of the list of countries, how would I change this code?
  <% ref.countries.forEach(function(c) { -%>
  <option value="<%= c %>">
    <%= ref.isoCodes[c] -%>
  </option>
  <% }); -%>
I am using node v6.10.3.
 
    