上一节我们已经完成了静态页面 index.html 的布局,这节我们开始服务器的编写。
如同 php 那样脚本文件以 .php 为文件扩展名,NodeJS的脚本文件扩展名为 .js 。
在这个例子中我们需要以下原生模块:
http模块负责HTTP服务器的创建dns模块主要负责解析当前DNS域名,返回DNS服务器IP地址fs模块负责对文件的操作url模块处理urlquerystring模块处理当前前端传来的字符串并解析
进入我们的项目所在目录 E:\node_workspace\code ,新建 index.js 文件,在这个入口问价中我们需要创建服务器并设置路由,添加如下内容:
/* 首先require 加载两个模块 */
var http = require('http'),
url = require('url') ;
/* 查看官网API我们可以看到http模块提供创建http的方法,dns提供解析dns的方法 */
/* 加载文件模块 */
var Router = require('./router.js');
/* 创建http服务器 */
http.createServer(function(req, res) {
/* 写http head 返回html,因此Content-Type为html*/
var pathname = url.parse(req.url).pathname;
req.setEncoding("utf8");
res.writeHead(200);
Router.router(res, req, pathname);
}).listen(3000, "127.0.0.1");
/* 打印运行log */
console.log('Server running at http://127.0.0.1:3000/');
在第一节我们就说了NodeJS 的模块,其中除了原生模块之外还有文件模块,关于模块中的 exports 和module.exports 请移步(参考)。
这里使用了 router.js 文件,这个文件是对网站前端发来的各个路由的处理,添加如下内容:
/* 路由模块处理 */
var ParseDns = require('./parse_dns.js'),
MainIndex = require('./main_index.js');
exports.router = function(res, req, pathname){
switch (pathname){
case "/parse":
ParseDns.parseDns(res, req)
break;
default:
MainIndex.goIndex(res, req)
}
}
在这个文件中我们主要有两个路由:'/' 和 '/parse' ,对应着不同的处理方式,所以这里对这两个路由又引入了另外两个文件模块来处理:parse_dns.js 和 main_index.js 。
新建 parse_dns.js ,添加如下内容:
/* dns解析模块 */
var querystring = require("querystring"),
url = require("url"),
dns = require('dns');
exports.parseDns = function(res, req){
var postData = "";
postData = querystring.parse(url.parse(req.url).query);
getDns(postData,function(domain,addresses){
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(JSON.stringify({
domain: domain,
addresses: addresses.join(',')
}));
});
}
function getDns(postData,callback){
var domain = postData.search_dns;
dns.resolve(domain, function(err, addresses){
if(!addresses){
addresses=['Not Exist !']
}
callback(domain, addresses);
});
}
这里引入了 querystring 、url 、dns 三个原生模块,
url.parse(req.url).query获取到请求的路由中的query值,由‘=’连接的字符串querystring.parse()将query值转换为对象JSON.stringify({domain:domain,addresses: addresses.join(',')})从一个对象解析出字符串
新建 main_index.js ,添加如下内容:
/* 处理首页逻辑信息 */
var fs = require('fs'),
url = require('url');
exports.goIndex = function(res, req){
var readPath = __dirname + '/' +url.parse('index.html').pathname;
var indexPage = fs.readFileSync(readPath);
/* 返回 */
res.end(indexPage);
}
__dirname + '/' +url.parse('index.html').pathname获取index.html文件fs.readFileSync(readPath)读取文件内容res.end(indexPage)通过response.end()输出内容
到这里我们的项目就差不多完成了。
打开 cmd ,切换到 E:\node_workspace\code 项目目录,执行以下命令:
node index.js
我们会看到在下面会输出日志:
Server running at http://127.0.0.1:3000/
打开浏览器,在地址栏输入 http://127.0.0.1:3000 即可看到如下界面:
输入一个网址,点击查询即可在下面看到对应的 IP 地址。
下一节我们就一些体验进行改善。