使用Node 搭建简单Web服务器(二)

Web服务器的的封装,以及解析路由,和获得post传入的参数

1.封装

server.js

// 最终服务端————简单的服务器

var http = require("http"); //在node中,可以使用require()函数来加载模块.
var url = require("url");//加载url模块
function start(route, handler) {
    function OnRequest(request, response) {
        var postData = "";
        var pathname = url.parse(request.url).pathname; //获得url地址

        request.setEncoding("utf-8");//设置了接收数据的编码格式为UTF-8

        request.addListener("data", function (postDataChunk) { //注册了“data”事件的监听器,用于收集每次接收到的新数据块,并将其赋值给postData 变量
            postData += postDataChunk;
            console.log("POST 被接收......");
        })
        request.addListener("end", function () { //当接收到所有数据,触发end事件后

            //handler,(需要执行的方法)
            route(pathname, handler, response,postData); //把所有有关  response 的调用都放入 route
        })
    }
    http.createServer(OnRequest).listen(8888);
    console.log("Server has Started...");
}
exports.start = start; //start是一个方法,调用

route.js

function route(pathname, handler, response, postData) {
    //匹配用户的输入的url,是不是一个方法 function,是方法就把方法返回,不是就报错 Not Found 404
    if (typeof handler[pathname] == "function") {
        return handler[pathname](response,postData);
    } else {
        response.writeHead(200, { "Content-Type": "text/plain" });
        response.write("Not Found 404...");
        response.end();
    }
}
exports.route = route;

handler.js

/*
在 route中被调用的方法
*/

/*
查询数据库,又或者是进行大量的计算会包含阻塞操作。形象的说就是“它阻塞了所有其他的处理工作”。
引入了一个新的Node.js模块,child_process。之所以用它,是为了实现一个既简单又实用的非阻塞操作:exec()。
*/
var exec = require("child_process").exec;
var querystrnig = require("querystring");//querystring模块,处理POST数据
function start(response) {

    console.log("Request handler ‘start‘ was called.");
    var body = ‘<html>‘ +
     ‘<head>‘ +
     ‘<meta http-equiv="Content-Type" content="text/html; ‘ +
     ‘charset=UTF-8" />‘ +
     ‘</head>‘ +
     ‘<body>‘ +
     ‘<form action="/upload" method="post">‘ +
     ‘<textarea name="text" rows="20" cols="60"></textarea>‘ +
     ‘<input type="submit" value="Submit text" />‘ +
     ‘</form>‘ +
     ‘</body>‘ +
     ‘</html>‘;       //这里是一个HTML 页面的Form表单

    exec("ls -lah", function (error, stdout, stderr) {
        response.writeHead(200, { "Content-Type": "text/html" });
        //body = stdout;
        response.write(body);
        response.end();
    });
}

function upload(response, postData) {
    console.log("Request handler ‘upload‘ was called.");
    response.writeHead(200, { "Content-Type": "text/plain" });
    response.write("您输入了:" + querystrnig.parse(postData).text);//textarea 的 name 为 text ,so  querystrnig.parse(postData).text
    response.end();
}
exports.start = start;
exports.upload = upload;

index.js  (解析路由)

var server = require("./server"); //    ./server  获得node.exe 同级别目录下的server.js文件
var router = require("./route"); //获得 route.js文件
var requestHandlers = require("./handler"); //获得 handler.js文件
var handle = {};

//制定路由规则,在url中输入  /start 则返回  handler.js  中的 start 方法!!!
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;

server.start(router.route,handle);

-->>cmd 指定到node安装文件夹,输入 :node index.js

-->>url中输入 http://localhost:8888/start

-->>提交后 可以看到post 过来的参数输出到页面。

学习地址:http://ourjs.com/detail/529ca5950cb6498814000005#javascript-and-nodejs

时间: 2024-10-27 08:29:52

使用Node 搭建简单Web服务器(二)的相关文章

使用Node 搭建简单Web服务器(二)之文件上传

安装Node后,打开node所在的文件夹,有一个node_modules文件夹,打开node_modules文件夹,可看到有一个npm文件夹和formidable这个文件夹.如果没有,说明没安装 node-formidable模块.(node-formidable模块是外部模块是Felix Geisendörfer开发的) 安装node-formidable模块: cmd输入->> npm install formidable 安装成功: npm info build Success: [em

利用node.js搭建简单web服务器的方法教程

前言 使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器. 早先不使用web服务器的情况下想要在浏览器端访问本地资源,可以利用firefox浏览器,其可以自己启动一个小型web服务器. 为了让刚接触node的人也能大体看懂,本文的代码我将尽量简化. 准备 首先,

使用Python或Node创建简单web服务器和FTP服务器实现文件共享

有时我们需要给旁边的人传一些文件,如果大家都用windows或者mac,那么皆大欢喜,直接用QQ传就可以了,但如果有个不省心的家伙用linux怎么办?可以用网盘或者U盘,或者另外一种更酷一些的方法来实现文件共享. 使用Python(2.6-2.7)创建简单的web服务器 进入某目录,执行 python -m SimpleHTTPServer port 即可创建一个局域网内可用的web服务器.使用ip:port进行访问. 使用Node创建简单的web服务器 首先执行一下命令安装http-serve

nodejs搭建简单web服务器!!

var http = require("http"), url = require("url"), path = require("path"), fs = require("fs"); http.createServer(function(req, res) { var pathname = __dirname + url.parse(req.url).pathname; if (path.extname(pathname)

windows 2008 R2搭建简单WEB服务器

Hello Node.js之搭建一个web服务器

Node.js简述 Nodejs 是JavaScript运行时,解释器是C/C++写的,基于ChromeV8引擎, 事件驱动,非阻塞I/O模型.本系列目前参考了Node.js官网,慕课网Scott的Node.js基础,<Node即学即用>图灵系列,以及可能的网上公开资源. Nodejs包管理器是npm 包就是别人写好的库. Nodejs提供了fs,http等内置对象,操作磁盘文件.搭建服务器. 特征:单线程.事件驱动.异步非阻塞I/O模型. Node.js安装 官网安装Node.js,自带np

【Web后端笔记】基于Socket实现的简单Web服务器搭建

我们在地址栏中输入的内容称为通用资源标记符(Universal Resource Identifier,URI)它有很多种样式,在Web中我们通常称为统一资源定位符(Uniform Resource Locator,URL)的形式,它的格式如下: 协议://主机[.端口号][绝对路径[?参数]] 在http://www.cnblogs.com/DebugLZQ/中,http表示协议名称;www.cnblogs.com表示主机的地址:可选的端口号没有出现,那么,将使用http协议默认的端口号80:

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器 一.搭建NginxWeb服务器     此种方式是用yum安装Nginx,为保证安装成功需在安装之前提前安装epel扩展源.     用yum安装Nginx     关闭系统防火墙           查看Nginx配置文件          安装完成后启动Nginx并查看其运行状态          然后在客户端浏览器里面输入Nginx服务器的IP地址即可验证Nginx工作正常      二.搭建NFS服务器     NFS:网络

Node.js 的Web 服务器--Fenix

Fenix 是提供给开发人员使用的简单的一个 Web 服务器, 是基于 Node.js 开发.可以同时在上面运行很多的项目, 最适合前端开发人员使用. 可以通过免费的 Node.js 控制台创建,停止,启动和共享 Fexix 服务器. 您可以通过把你的桌面变成一个公共的 Web 服务器,让大家能看到你的web服务. Fenix官方 Node.js 的Web 服务器--Fenix