var config = require('config'); // подгрузка npm модуля с именем config
var config = require('./config'); // подгрузка файла config.js из текущего каталога
var config = require('../config'); // подгрузка файла config.js из каталога на 1 выше
var config = require('../config.js'); // то же, что и предыдущая строка
module.exports = {
host: 'hostname',
port: 80
};
// Подключение конфига
var config = require('./config.js');
// Использование конфига
console.dir(config);
{
"host": "hostname",
"port": 80
}
// Подключение конфига
var config = require('./config.json');
// Использование конфига
console.dir(config);
var http = require('http');
var me = { name: 'jura', age: 22 };
var routing = {
'/': 'welcome to homepage',
'/user': me,
'/user/name': function() { return me.name; },
'/user/age': function() { return me.age; }
};
var types = {
object: function(o) { return JSON.stringify(o); },
string: function(s) { return s; },
undefined: function() { return 'not found'; },
function: function(fn, req, res) { return fn(req, res) + ''; },
};
http.createServer(function (req, res) {
var data = routing[req.url],
result = types[typeof(data)](data, req, res);
res.end(result);
}).listen(80);
var http = require('http');
var me = { name: 'jura', age: 22 };
var routing = {
'/': 'welcome to homepage',
'/user': me,
'/user/name': function() { return me.name; },
'/user/age': function() { return me.age; },
'/user/*': function(client, par) { return 'parameter=' + par[0]; }
};
var types = {
object: function(o) { return JSON.stringify(o); },
string: function(s) { return s; },
number: function(n) { return n + ''; },
undefined: function() { return 'not found'; },
function: function(fn, par, client) { return fn(client, par); }
};
var matching = [];
for (key in routing) {
if (key.indexOf('*') !== -1) {
var rx = new RegExp(key.replace('*', '(.*)'));
matching.push([rx, routing[key]]);
delete routing[key];
}
}
function router(client) {
var rx, par, route = routing[client.req.url];
if (route === undefined) {
for (var i = 0, len = matching.length; i < len; i++) {
rx = matching[i];
par = client.req.url.match(rx[0]);
if (par) {
par.shift();
route = rx[1];
break;
}
}
}
var renderer = types[typeof(route)];
return renderer(route, par, client);
}
http.createServer(function (req, res) {
res.end(router({ req: req, res: res }) + '');
}).listen(80);
console.log(items_list);
а уже потом items_list = data
И это хорошо, потому, что не происходит ожидания исполнения коллбеков, не происходит блокирования потока исполнения. Всю синхронную логику обработки полученных в коллбеке данных Вы можете написать прямо в коллбеке, а если нужно реализовать последовательный или параллельный вызов нескольких ассинхронных запросов (все, что связано с вводом/выводом, доступом к базе и файлам, например), то это можно сделать разными способами, самые популярные из них, это библиотека async и промисы. Я использую https://github.com/caolan/async Например:var async = require('async');
var items_list, users_list;
async.parallel([
function(callback) { // делаем первый запрос к базе
db.model('items').find({}, function (err, data) {
items_list = data;
callback(); // данные получены, возвращаемся
});
},
function(callback) { // параллельно делаем второй запрос к базе
db.model('users').find({}, function (err, data) {
users_list = data;
callback(); // данные получены, возвращаемся
});
}
],
function() {
// когда оба запроса уже завершены, то мы попадаем сюда
console.dir({ items: items_list, users: users_list });
});
var http = require('http');
http.createServer(function (req, res) {
if (req.method === 'GET' && req.url === '/read') {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World');
} else res.end('You should open /read');
}).listen(81);
module.exports = function(client, callback) {
dbImpress.users.find({ group: client.fields.group }).toArray(function(err, nodes) {
callback(nodes);
});
}
[
{ "login": "Vasia Pupkin", "password": "whoami", "group": "users" },
{ "login": "Marcus Aurelius", "password": "tomyself", "group": "users" }
]