2013-09-13 5 views
0

Я хочу получить записи MX для имени хоста www.example.com. У узла есть функция для него.Получить записи DNS MX в узле

dns.resolveMx(domain, callback) 

Но я не хочу, чтобы этот обратный вызов. Я хочу что-то вроде вызова синхронизации. например

var records = dns.resolveMx(domain); 

Возможно ли это?

(Примечание: - Я нашел эту функцию в узле документации ссылке: -. http://nodejs.org/api/dns.html)

ответ

1

Есть ли какой-либо причине вы хотите, чтобы блокировать приложения с работой сети? Резольщики DNS вызывают на уровне C библиотекой c-ares, которая является асинхронной по дизайну. Поэтому вы не можете сделать его синхронным. Это код из модуля DNS с удаленными ненужными частями:

var cares = process.binding('cares_wrap'); 

function resolver(bindingName) { 
    var binding = cares[bindingName]; 

    return function query(name, callback) { 
    callback = makeAsync(callback); 
    var req = { 
     bindingName: bindingName, 
     callback: callback, 
     oncomplete: onresolve 
    }; 
    var err = binding(req, name); 
    if (err) throw errnoException(err, bindingName); 
    callback.immediately = true; 
    return req; 
    } 
} 

var resolveMap = {}; 
exports.resolveMx = resolveMap.MX = resolver('queryMx'); 
+0

Первое спасибо за подробное объяснение. Да, я хочу выполнить запрос синхронизации, что-то вроде функции PHP dns_get_record(). –

+0

Но есть ли у вас причины для этого? Включение всего в функцию обратного вызова более эффективно, чем «приостановка» всего приложения для запроса DNS. – hexacyanide

+0

Ваша точка действительна. Но вы знаете, что я портировал одну из библиотек PHP для Node. И это должно было работать так. –

Смежные вопросы