从代码片段入门Node.js

摘要

最近在读《Node即学即用》一书,就书中第一章的内容,记载自己学习的进度,之前也了解过Node,故在这里只是通过记录程序片段。不过根据一段一段程序的练习,相信你也会像我一样,很快就被强大的Node带起兴趣。

1、Node运行简单脚本-ls命令

var fs = require("fs");
var files = fs.readdirSync(".");
for (fn in files){
    console.log(files[fn]);
}

运行一下,显示当前目录下的文件。如果想显示其他目录呢?看下面代码。

var fs = require("fs");
var dir = ".";
if (process.argv[2])
    dir = process.argv[2];
var files = fs.readdirSync(dir);
for (fn in files){
    console.log(files[fn]);
}

带上参数,显示其他目录的下的文件。

2、最简单的服务器

var http = require("http");
http.createServer(function(request, response){
    response.writeHead(200 , {"Content-Type" : "text/html"});
    response.write("Hello,Node.js!");
    response.end();
}).listen(8888);
console.log("Server is started @8888");

http模块的createServer方法快速的就创建了一个Web服务器,同时监听8888端口,在浏览器上输入网址http://127.0.0.1:8888看看。

3、显示服务器图片

var http = require("http");
http.createServer(function(request,response){
    response.writeHead(200 , {"Content-Type" : "text/html"});
    response.write("<html><head><title>HTML Document</title></head><body><img src='http://www.linux2me.com/assets/img/logo/logo.jpg' title='love'></body></html>");
    response.end();
}).listen(8888);
console.log("Server is started @8888");

和上一段程序几乎一样,这里只是返回一个Html文档到客户端,运行一下程序,打开浏览器,看看是不是显示这张图,呵呵。

4、创建一个TCP服务器

var net = require("net");
var chatServer = net.createServer();
chatServer.on('connection' , function(client){
    client.write("Hi!\n");
    client.write("Bye!\n");
    client.end();
});
chatServer.listen(8888);
console.log("Server is started @8888");

这里使用net模块,在终端上通过telnet 127.0.0.1 8888命令连接上服务器,实现终端对话。

5、一个可以响应的TCP服务器

var net = require("net");
var chatServer = net.createServer();
chatServer.on('connection' , function(client){
    client.write("Hi!\n");
    client.on('data', function(data){
        console.log("You just input : " + data);
    });
});
chatServer.listen(8888);
console.log("Server is started @8888");

基于上面那程序,加上监听函数,可以针对输入内容进行反馈,这次再通过telnet 127.0.0.1 8888试试,终端会打印出你输入的内容。

6、一个多人聊天室

var net = require("net");
var chatServer = net.createServer();
clientList=[];
chatServer.on('connection' , function(client){
    clientList.push(client);
    client.write("Hi!\n");
    client.on('data' , function(data){
        for (var i = 0 ; i < clientList.length ; i++){
            if(client != clientList[i]){
                clientList[i].write(data);
            }
        }
    });
});
chatServer.listen(8888);
console.log("Server is started @8888");

更加完善的聊天室,clientList[]记录连接的终端数,打印出其他终端的输入内容,实现聊天室基本功能。

7、完善的多人聊天室

var net = require('net');
var chatServer = net.createServer();
clientList=[];
chatServer.on('connection' , function(client){
    clientList.push(client);
    client.name = client.remoteAddress + ":" + client.remotePort;
    client.write("Hi~\n");
    console.log(client.name + " joined!\n");
    client.on('data' , function(data){
        for(var i = 0 ; i < clientList.length ; i++){
            if(clientList[i] != client){
                clientList[i].write(client.name + " says " + data);
            }
        }
    });
    client.on('end' , function(){
        clientList.splice(chatList.indexOf(client) , 1);
    });
    client.on('error' , function(e){
        console.log(e);
    })
});
chatServer.listen(8888);
console.log("Server is started @8888");

完整的简单的多人聊天室,加入说明文本、监听结束、监听错误,当终端退出,移出clientLis[]列表,防止报错。

8、使用Express的基本Web服务器

var express = require("express");
var app = express();
app.get('/' , function(request, response){
    response.send("Welcome to Node Twitter!");
});
app.listen(8888);
console.log("Server is started @8888");

先记录到这里吧,下面就是通过模块来建起我们的web服务了,待深入学习后再进行。