上一节我们已经完成了静态页面 index.html
的布局,这节我们开始服务器的编写。
如同 php
那样脚本文件以 .php
为文件扩展名,NodeJS
的脚本文件扩展名为 .js
。
在这个例子中我们需要以下原生模块:
http
模块负责HTTP
服务器的创建dns
模块主要负责解析当前DNS
域名,返回DNS
服务器IP
地址fs
模块负责对文件的操作url
模块处理url
querystring
模块处理当前前端传来的字符串并解析
进入我们的项目所在目录 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
地址。
下一节我们就一些体验进行改善。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。