nodejs-构建http服务器

来源:互联网 发布:淘宝产品宝贝标题优化 编辑:程序博客网 时间:2024/05/16 09:31

nodejs-构建http服务器

因为工作需要所以上手了node,对于nodejs不需要服务器去处理请求觉得非常神奇,然后决定自己试一下搭建一个http服务器

入口文件app.js:

var server = require('./server');var router = require('./router');var fs = require('fs');// 保存url处理方法,路由router注册了一个当地址栏Get:/home时处理的函数,传入参数res,req,进行响应router.get('/home' , function(res,req) {    console.log('Request handler "home" was called.');    // 读取home.html文件    var content = fs.readFileSync('./views/home.html');    res.writeHead(200, { 'Content-Type': 'text/html' });    res.write(content);    res.end();});router.get('/about' , function(req,res) {    console.log('Request handler "about" was called.');    // 读取about.html文件    var content = fs.readFileSync('./views/about.html');    res.writeHead(200, { 'Content-Type': 'text/html' });    res.write(content);    res.end();});// 启动http serverserver.start(router);

router路由模块,router.js:

var fs = require('fs');// 路由函数// 处理不同url的请求// 并返回相应内容var handler = {};function route(pathname, res, req) {    console.log('About to route a request for ' + pathname);    // 判断此url是否存在特定处理函数    // 存在则调用handler处理    // 不存在则返回404页面    if (typeof handler[pathname] === 'function') {        handler[pathname](res, req);    } else {        console.log('No request handler found for ' + pathname);        // 读取404页面        // 所有页面都存放在views文件夹下        var content = fs.readFileSync('./views/404.html');        res.writeHead(404, { 'Content-Type': 'text/html' });        res.write(content);        res.end();    }}//匹配get地址栏请求,注册自定义的处理函数handlefunction get(pathname, handle){        handler[pathname] = handle;}// 导出 route 方法exports.route = route;exports.get = get;

服务器模块,server.js:

//// 创建http server//// 加载所需模块var http = require('http');var url = require('url');var fs = require('fs');// 设置ip和端口// 实际应用中,可以把这些写到配置文件中var host = '127.0.0.1',    port = 8081;// 创建http serverfunction start(router) {    // 参数    // route  判断url是否存在,存在则调用handle处理,不存在则返回404    // handle 处理不同的url请求    // 处理request请求    function onRequest(req, res) {        // 使用url.parse()方法解析url        // 它会把url string转化为一个object        // 这样我们就可以很方便的获取url中的host、port、pathname等值了        var pathname = url.parse(req.url).pathname;        console.log('Request for ' + pathname + ' received.');        // 判断并处理不同url请求        // 后面介绍此方法        console.log('to the router.route');        router.route(pathname, res, req);    }    // 使用http.createSserver()方法创建http server    // 并传入onRequest()方法    // 然后使用listen()方法监听指定地址    http.createServer(onRequest).listen(port, host);    console.log('Server has started and listening on ' + host + ':' + port);}// 导出 start 方法exports.start = start;

在views文件夹下,添加页面404.html:

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title>404 page</title>    </head>    <body>        <p>404 page not found</p>    </body></html>

about.html页面:

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title>About page</title>    </head>    <body>        <p>about page</p>    </body></html>

home.html页面:

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title>Home page</title>    </head>    <body>        <p>home page</p>    </body></html>

这个简单的node框架,有点像express,所有的模块啊,处理请求啊都是一个一个函数来实现的,就是所谓的函数式编程

0 0
原创粉丝点击