node.js--dns解析demo

//引入模块
var http = require(‘http‘),
    url = require(‘url‘),
    querystring = require(‘querystring‘),
    fs = require(‘fs‘),
    dns = require(‘dns‘);

//展现填写页面。由res.end输出查询的form表单
var goIndex = function(req, res){
    res.end("<html>" +
        "<head>" +
        "<title>DNS查询</title>" +
        "<meta http-equiv=‘content-type‘ content=‘text/html;charset=utf-8‘>" +
        "</head>" +
        "<body>" +
        "<form action=‘/parse‘ method=‘post‘>" +
        "<input type=‘text‘ name=‘search_dns‘/>" +
        "<input type=‘submit‘ value=‘查询‘ />" +
        "</form>" +
        "</body>" +
        "</html>");
};

//dns解析函数。通过dns模块的dns.resolve解析,解析成功执行回调,回调中把值写到参数函数的入参中
var goDns = function(postData, callback){
    var domainValue = querystring.parse(postData).search_dns; //获取post数据中的search_dns
    dns.resolve(domainValue, function(err, addresses){
        if(!addresses){
            addresses = [‘域名不存在‘];
        }
        callback(domainValue, addresses);
    });
};

//dns解析。获取post过来的数据,用dns模块进行解析,输出解析结果
var parseDns = function(req, res){
    //读取post过来的数据
    var postData = ‘‘;
    //req请求对象有addListener方法,‘data‘事件是有数据传送到服务端时触发,‘end‘是在数据发送完毕时触发
    req.addListener(‘data‘, function(dataChunk){
        postData += dataChunk;
    });
    req.addListener(‘end‘, function(){//数据完全传送完毕,进行dns解析
        goDns(postData, function(domain, addresses){//回调中输出解析结果展示页面
            res.end("<html>" +
                "<head>" +
                "<meta http-equiv=‘content-type‘ content=‘text/html;charset=utf-8‘>" +
                "</head>" +
                "<div>" +
                "domain: <span>" + domain + "</span>" +
                "ip:" + addresses.join(‘,‘) +
                "</div>" +
                "</html>");
        });
    });
};

var router = function(req, res, pathname){
    switch(pathname){
        case ‘/parse‘ :
            parseDns(req, res);
            break;
        default :
            goIndex(req, res);
    }
};

http.createServer(function(req, res){
    //获取请求相对路径
    var pathname = url.parse(req.url).pathname;
    //将请求设置为utf-8防止乱码
    req.setEncoding(‘utf8‘);
    //写返回的头
    res.writeHead(200, {‘Content-Type‘ : ‘text/html‘});
    //router请求路径若为/parse则进行dns解析,若不是则展示填写页面
    router(req, res, pathname);
})
    .listen(3000, ‘127.0.0.1‘);

参考:《node.js开发实战详解》清华大学出版社,此文可以看作是此书的读书笔记

时间: 2024-10-25 15:54:02

node.js--dns解析demo的相关文章

Node.js具体解析

介绍 JavaScript 高涨的人气带来了非常多变化.以至于现在使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样,现在我们也能够在server上执行 JavaScript ,从前端跨越到后端,这样巨大的反差让人难以想象.由于只在几年前 Javascript 还如同 Flash 或者 Java applet 那样嵌入网页在沙箱环境中执行. 在深入Node.js之前.你可能须要阅读和了解使用跨栈式JavaScript(JavaScript across the stack)带来的优点

Node.js详细解析

介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样,现在我们也可以在服务器上运行 JavaScript ,从前端跨越到后端,这样巨大的反差让人难以想象,因为仅仅在几年前 Javascript 还如同 Flash 或者 Java applet 那样嵌入网页在沙箱环境中运行. 在深入Node.js之前,你可能需要阅读和了解使用跨栈式JavaScript(JavaScript across the stack)带来的好处,它统

Node.JS文件系统解析

1.Node.js 文件系统 var fs = require("fs") 2.异步和同步 读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync(). var fs = require('fs') fs.readFile( 'a.txt','utf-8', function (err,data) { if( err ) { console.error(err) }else{ console.log( "not aynsc===>

node.js基础内容

node.js node.js是建立在谷歌Chrome的JavaScript引擎(v8)的web应用程序框架. node.js 自带的运行环境可在JavaScript脚本的基础上解释和执行.这个运行是运行在浏览器以外的任何机器上执行JavaScript代码.所以也可以在服务端运行,Node.js还提供了各种丰富的JavaScript模块库,它极大简化了使用Node.js来扩展Web应用程序的研究与开发. 特性 Node.js库的异步和事件驱动的API全部都是异步就是非阻塞.它主要是指基于Node

为Node.js编写组件的几种方式

本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍使用v8 API跟使用swig框架的不同: (1)v8 API方式为官方提供的原生方法,功能强大而完善,缺点是需要熟悉v8 API,编写起来比较麻烦,是js强相关的,不容易支持其它脚本语言. (2)swig为第三方支持,一个强大的组件开发工具,支持为python.lua.js等多种常见脚本语言生成C++组件

Node.js入门:文件查找机制

文件查找流程图 从文件模块缓存中加载 尽管原生模块与文件模块的优先级不同,但是都不会优先于从文件模块的缓存中加载已经存在的模块. 从原生模块加载 原生模块的优先级仅次于文件模块缓存的优先级.require方法在解析文件名之后,优先检查模块是否在原生模块列表中.以http模块为例,尽管在目录下存在一个http/http.js/http.node/http.json文件,require("http")都不会从这些文件中加载,而是从原生模块中加载. 原生模块也有一个缓存区,同样也是优先从缓存

01 Node.js简介, 安装&amp;配置

Node.js 简介 Node.js 是什么 Node.js 有着强大而灵活的包管理器(node package manager,npm) 目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开发框架, CSS生成器, 操作系统API, 网络通信 等. Node.js 是什么 ? 是一个让 javascript 运行在服务器端的平台, 以前javascript只能运行在浏览器中,  node.js 可以解析 javascript. CommonJS 试图设计一套Javascript的规范.

Node.js模块系统

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'main.js' 文件,代码如下: var hello = require('./hello'); hello.world(); 以上实例中

node js 模块系统

Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'hello.js' 文件,代码如下: var hello = require('./hello'); hello.w

Node.js 教程 04 - 模块系统

前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js应用程序的基本组成部分,文件和模块是一一对应的. 换言之,一个Node.js文件就是一个模块,这个文件可能是Javascript代码.JSON或者编译过的C/C++扩展. 实例一: 这个实例演示的是,在hello.js中创建一个方法,然后在主程序main.js中调