node.js web应用基本框架

直入主题,我们的目的就是在node.js的基础上搭建一个简单的web应用,能够根据不同的请求做出不同的反应,为了达到目的我们至少需要这些功能

1、有一个server能接受用户的请求

2、有一个路由router能够根据用户的不同请求做不同的响应

3、有一些handle能对用户的request做分析并把结果返回给用户,同时这些handle能被router调用


达到上面的要求我们需要这么几个文件

1、index.js,作为入口文件

2、server.js,作为服务器server

3、router.js,作为路由器

4、handler.js,作为实际的动作处理

下面一一分析各个文件

index.js

var server=require('./server');
var router=require('./router');
var handlers=require('./handler');//引入server,router,handlers模块

var handle={};
handle['/']=handlers.index;
handle['/index']=handlers.index;
handle['/postform']=handlers.postform;
handle['/postaction']=handlers.postaction;//把handlers 和url做对应,并存储在handle对象中

server.start(router.route,handle);//通过依赖注入的方式把router和handle传入server

server.js

var http=require('http');
var url=require('url');

function start(route,handle){
    var host='localhost';
    var port='1337';

    function onRequest(request,response){
        var postData='';
        route(request,response,postData,handle);
    }

    http.createServer(onRequest).listen(port,host);//创建服务并调用route

    console.log('Server Listen At Http://'+host+':'+port+'/');
}

exports.start=start;

router.js

var url=require('url');

function route(request,response,postData,handle){
    var path=url.parse(request.url).pathname;
    if(typeof handle[path]=='function'){
        handle[path](request,response);//路由分发并调用handle处理请求
    }
    else{
        response.writeHead(404,{'Content-Type':'text/html'});
        response.write('your request is not exist!!!');
        response.end();
    }


}

exports.route=route;

handler.js

/**
 * Created with JetBrains WebStorm.
 * User: lehui
 * Date: 13-1-9
 * Time: 下午12:12
 * To change this template use File | Settings | File Templates.
 */
var url=require('url');
var exec=require('child_process').exec;
var querystring=require('querystring');

/**********************站点首页******************************/
function index(request,response){
    response.writeHead(200,{'Content-Type':'text/html'});
    var body='<html>'+
        '<head>'+
        '<meta http-equiv="Content-Type" content="text/html; '+
        'charset=UTF-8" />'+
        '</head>'+
        '<body>'+
        '<div><ul>'+
        '<li><a href="/">home</a></li>'+
        '<li><a href="/postform">post</a></li>'+
        '<li><a href="/iotest1">iotest1</a></li>'+
        '<li><a href="/iotest2">iotest2</a></li>'+
        '<li><a href="/fileuploadform">fileUploadForm</a></li>'+
        '</ul></div>'+
        '</body>'+
        '</html>';
    response.write(body);
    response.end();
}
/***************************post数据传输测试**************************************/
function postForm(request,response){
    response.writeHead(200,{'Content-Type':'text/html'});
    var body = '<html>'+
        '<head>'+
        '<meta http-equiv="Content-Type" content="text/html; '+
        'charset=UTF-8" />'+
        '</head>'+
        '<body>'+
        '<form action="/postaction" method="post">'+
        '<textarea name="text" rows="20" cols="60"></textarea>'+
        '<input type="submit" value="Submit text" />'+
        '</form>'+
        '</body>'+
        '</html>';

    var path=url.parse(request.url).pathname;
    response.write(body);
    response.end();
}

function postAction(request,response){
    var formidable=require('formidable');
    var form=new formidable.IncomingForm();//这里借用了第三方模块formidable来对post数据进行处理,这个模块还能处理文件上传
    form.parse(request,function(error,fields,files){
        if(!error){
            response.writeHead(200,{'Content-Type':'text/html'});
            response.write(JSON.stringify(fields));
            response.end();
        }
    });

}

exports.index=index;
exports.postform=postForm;
exports.postaction=postAction;


至此一个简单的web应用就创建完成,我们只要用node index.js启动服务就ok了,然后在端口1337请求服务就能看到对应的网页:http://localhost:1337/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值