HelloWorld示例只有演示意义,这次我们来搞一个实际的例子:文件服务器。我们使用Node.js创建一个HTTP协议的文件服务器,你可以使用浏览器或其它下载工具到文件服务器上下载文件。

用Node.js实现的HTTP文件服务器,比我在Qt网络编程实战之HTTP服务器视频课程里用Qt实现的版本,复杂度要小太多太多了。

为了读取文件,我们会用到File System模块(名字是”fs”),Stream,我们还要分析URL,区别HTTP方法,还会用到EventEmitter。

文件服务器FileServer的代码

先上代码吧,依然是简单的:

// 引入http模块
var http = require("http"); 
var fs = require("fs");

// 创建server,指定处理客户端请求的函数
http.createServer(
    function(request, response) {
        //判断HTTP方法,只处理GET  
        if(request.method != "GET"){
            response.writeHead(403);
            response.end();
            return null;
        }

        //此处也可使用URL模块来分析URL(https://nodejs.org/api/url.html)
        var sep = request.url.indexOf('?');
        var filePath = sep < 0 ? request.url : request.url.slice(0, sep);
        console.log("GET file: " + filePath);

        //当文件存在时发送数据给客户端,否则404
        var fileStat = fs.stat("."+filePath, 
            function(err, stats){
                if(err) {
                    response.writeHead(404);
                    response.end();
                    return null;
                }
                //TODO:Content-Type应该根据文件类型设置
                response.writeHead(200, {"Content-Type": "text/plain", "Content-Length": stats.size});

                //使用Stream
                var stream = fs.createReadStream("."+filePath);

                stream.on('data',function(chunk){
                    response.write(chunk);
                });

                stream.on('end',function(){
                    response.end();
                });

                stream.on('error',function(){
                    response.end();
                });
            }
        );
    }
).listen(8000); 

console.log("Hello World start listen on port 8000");

最大的变化,就在传递给createServer方法的参数了。

我们根据request.method作了判断,不是GET就返回403。如果是呢,就判断文件是否存在,不存在,返回404,存在就读取数据写给客户端。逻辑就是这么简单。下面我们来介绍用到的新知识。

File System

要使用FileSystem,得用require引入fs模块,就如前面代码里那样。File System的API老长老长了,看这里吧:https://nodejs.org/api/fs.html。我们只说用到的特性。

获取文件状态

在我们的FileServer里,收到和客户端请求时先通过fs.stat()方法获取文件状态。fs.stat()方法原型如下:

fs.stat(path, callback)

第一个参数是文件路径,第二个参数是回调函数。fs.stat()方法是异步的,结果通过回调函数callback返回。callback的原型如下:

function(err, stats)

第一个参数指示是否出现了错误,第二个参数是一个对象,类型是fs.Stats,保存了文件的状态信息,比如大小、创建时间、修改时间等。

FileServer的代码获取到文件状态后,读取大小,调用http.ServerResponse的writeHead方法,设置HTTP状态码为200,还设置了Content-Length头部。代码如下:

response.writeHead(200, {"Content-Type": "text/plain", "Content-Length": stats.size})

ReadStream

接下来呢,我们调用fs.createReadStream创建了一个ReadStream对象。ReadStream是Stream,也是EventEmitter。

fs.createReadStream方法原型如下:

fs.createReadStream(path[, options])

第一个参数是文件路径,第二个参数是可选的JSON对象,用来指定打开文件的一些选项,默认值如下:

{ flags: ‘r’, 
encoding: null, 
fd: null, 
mode: 0666, 
autoClose: true 
}

autoClose属性默认为true,读完文件或读取出错时,文件会被自动关闭。fd属性可以关联一个已有的文件描述符,这样就会忽略path,根据一个已经打开的文件来创建流。options还可以有start和end项,指定起、止位置,读取文件的特定区域。如果我们要实现断点续传,就需要这个了,用法类似这样:

fs.createReadStream('sample.mp4', {start: 1000, end: 10000});

encoding用来指定文件的编码,这对于文本文件有特殊的意义,目前支持’utf8’、’ascii’和’base64’。

ReadStream读取数据是异步的,一块一块的读,读到一部分就发送一个data事件,数据呢,会传递给与事件关联的listener(实际上是一个回调方法)。在我们的代码里,仅仅是调用response.write把数据写给客户端。注意,可能会多次调用response.write哦。又因为我们设置了Content-Length,所以不会采用chunked编码方式。如果我们不设置Content-Length,那默认会启用chunked方式。

ReadStream读完文件时会发射end事件,出错时会发射error事件,我们监听这两个事件,简单的终止响应。

我们在示例代码中看到了stream.on这种代码,下面来解释吧。

EventEmitter

Node.js基于V8引擎实现的事件驱动IO,是其最大最棒的特色之一。有了事件机制,就可以充分利用异步IO突破单线程编程模型的性能瓶颈,使得用JavaScript作后端开发有了实际意义。

EventEmitter的基本用法

events.EventEmitter是一个简单的事件发射器的实现,具有addListener、on、once、removeListener、emit等方法,开发者可以很方便的调用这些API监听某个事件或者发射某个事件。

我们在示例中用到的fs.ReadStream就是一个EventEmitter,它实现了stream.Readable接口,而stream.Readable具有data、error、end、close、readable等事件。

通常我们使用EventEmitter的on或addListener来监听一个事件,这个时间可能会多次触发,每次触发,我们提供的回调方法都会被调用。我们示例中的代码就是这样:

        stream.on('data',function(chunk){
            response.write(chunk);
        });

Node.js的事件机制,会给某个事件关联一个回调方法列表,这样多个关注者就可以监听同一个事件。每个事件发射时,可能会带有数据和状态,这些数据是通过回调方法的参数传递出来的。那某一个特定的事件,它对应的回调方法的参数是什么样子的,则由事件定义的那个类(实例)来决定。EventEmitter的emit方法原型如下:

emitter.emit(event[, arg1][, arg2][, ...])

这个原型说明一个事件的回调方法可以有一个或多个参数,也可以没有参数。要想知道某个事件的回调方法是否有参数、每个参数的含义,只好去找相关的API文档。stream.Readable的data事件的参数是chunk,Buffer类型,代表读到的数据。

如果我们只想监听某个事件一次,则可以调用EventEmitter的once方法。要想移除一个事件监听器,可以调用removeListener,想移除所有,则可以调用removeAllListener。

自定义事件

Node.js的很多模块都继承自Event模块。我们自己也可以通过继承EventEmitter来实现自己的对象,添加自己的自定义事件。

这里有个简单的例子:

var util=require("util");
var events = require("events");
function Ticker() {
    var self = this;
    events.EventEmitter.call(this);
    setInterval(function(){
        self.emit("tick")
        },
        1000
    );
}
util.inherits(Ticker, events.EventEmitter);

var ticker = new Ticker();
ticker.on("tick", function() {
  console.log("tick event");
});

在这个简单的例子里,我们定义了Ticker对象,通过全局方法setInterval开启了一个定时器,每隔1000毫秒发射一个名为“tick”的事件。

Node.js的工具模块封装了继承的方法,我们调用它来的inherits方法来完成Ticker对events.EventEmitter的继承。

自定义事件的使用方法,和Node.js内置模块提供的事件的用法完全一样。

原文链接:

http://www.zztcdj.com/a/lianxiwomen/20160509/2000.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2001.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2002.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2003.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2004.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2005.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2006.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2007.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2008.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2009.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2010.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2011.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2012.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2013.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2014.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2015.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2016.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2017.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2018.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2019.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2020.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2021.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2022.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2023.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2024.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2025.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2026.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2027.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2028.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2029.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2030.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2031.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2032.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2033.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2034.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2035.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2036.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2037.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2038.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2039.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2040.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2041.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2042.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2043.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2044.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2045.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2046.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2047.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2048.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2049.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2050.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2051.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2052.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2053.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2054.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2055.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2056.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2057.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2058.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2059.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2060.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2061.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2062.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2063.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2064.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2065.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2066.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2067.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2068.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2069.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2070.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2071.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2072.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2073.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2074.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2075.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2076.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2077.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2078.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2079.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2080.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2081.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2082.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2083.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2084.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2085.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2086.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2087.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2088.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2089.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2090.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2091.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2092.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2093.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2094.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2095.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2096.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2097.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2098.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2099.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2100.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2101.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2102.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2103.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2104.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2105.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2106.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2107.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2108.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2109.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2110.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2111.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2112.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2113.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2114.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2115.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2116.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2117.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2118.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2119.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2120.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2121.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2122.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2123.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2124.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2125.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2126.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2127.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2128.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2129.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2130.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2131.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2132.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2133.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2134.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2135.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2136.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2137.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2138.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2139.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2140.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2141.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2142.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2143.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2144.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2145.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2146.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2147.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2148.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2149.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2150.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2151.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2152.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2153.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2154.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2155.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2156.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2157.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2158.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2159.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2160.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2161.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2162.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2163.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2164.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2165.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2166.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2167.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2168.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2169.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2170.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2171.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2172.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2173.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2174.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2175.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2176.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2177.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2178.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2179.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2180.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2181.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2182.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2183.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2184.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2185.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2186.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2187.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2188.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2189.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2190.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2191.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2192.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2193.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2194.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2195.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2196.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2197.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2198.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2199.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2200.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2201.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2202.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2203.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2204.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2205.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2206.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2207.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2208.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2209.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2210.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2211.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2212.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2213.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2214.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2215.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2216.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2217.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2218.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2219.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2220.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2221.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2222.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2223.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2224.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2225.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2226.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2227.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2228.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2229.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2230.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2231.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2232.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2233.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2234.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2235.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2236.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2237.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2238.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2239.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2240.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2241.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2242.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2243.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2244.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2245.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2246.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2247.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2248.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2249.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2250.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2251.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2252.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2253.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2254.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2255.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2256.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2257.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2258.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2259.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2260.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2261.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2262.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2263.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2264.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2265.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2266.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2267.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2268.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2269.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2270.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2271.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2272.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2273.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2274.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2275.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2276.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2277.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2278.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2279.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2280.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2281.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2282.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2283.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2284.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2285.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2286.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2287.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2288.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2289.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2290.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2291.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2292.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2293.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2294.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2295.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2296.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2297.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2298.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2299.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2300.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2301.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2302.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2303.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2304.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2305.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2306.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2307.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2308.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2309.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2310.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2311.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2312.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2313.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2314.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2315.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2316.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2317.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2318.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2319.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2320.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2321.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2322.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2323.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2324.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2325.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2326.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2327.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2328.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2329.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2330.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2331.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2332.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2333.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2334.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2335.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2336.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2337.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2338.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2339.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2340.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2341.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2342.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2343.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2344.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2345.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2346.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2347.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2348.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2349.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2350.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2351.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2352.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2353.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2354.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2355.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2356.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2357.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2358.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2359.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2360.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2361.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2362.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2363.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2364.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2365.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2366.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2367.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2368.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2369.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2370.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2371.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2372.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2373.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2374.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2375.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2376.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2377.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2378.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2379.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2380.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2381.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2382.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2383.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2384.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2385.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2386.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2387.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2388.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2389.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2390.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2391.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2392.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2393.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2394.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2395.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2396.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2397.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2398.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2399.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2400.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2401.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2402.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2403.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2404.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2405.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2406.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2407.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2408.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2409.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2410.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2411.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2412.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2413.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2414.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2415.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2416.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2417.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2418.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2419.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2420.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2421.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2422.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2423.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2424.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2425.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2426.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2427.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2428.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2429.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2430.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2431.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2432.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2433.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2434.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2435.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2436.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2437.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2438.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2439.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2440.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2441.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2442.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2443.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2444.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2445.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2446.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2447.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2448.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2449.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2450.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2451.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2452.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2453.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2454.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2455.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2456.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2457.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2458.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2459.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2460.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2461.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2462.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2463.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2464.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2465.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2466.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2467.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2468.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2469.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2470.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2471.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2472.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2473.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2474.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2475.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2476.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2477.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2478.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2479.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2480.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2481.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2482.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2483.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2484.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2485.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2486.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2487.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2488.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2489.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2490.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2491.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2492.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2493.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2494.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2495.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2496.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2497.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2498.html

http://www.zztcdj.com/a/lianxiwomen/20160509/2499.html

http://www.zztcdj.com/sitemap.txt