您的位置:首页 > Web前端 > Node.js

node.js web应用基本框架

2013-01-10 11:06 711 查看
直入主题,我们的目的就是在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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: