美文网首页
Nodejs基本架构

Nodejs基本架构

作者: Homary | 来源:发表于2019-01-08 15:55 被阅读0次

    学习总结之用,方便以后调整

    目录

    ├── app.js
    ├── bin
    │   └── env.js
    ├── handle.js
    ├── public
    ├── README.md
    ├── routes
    │   ├── handles
    │   │   ├── instruction.js
    │   │   ├── login.js
    │   │   ├── quit.js
    │   │   └── systemList.js
    │   └── routes.js
    ├── system.json
    └── views
    

    bin: 服务器目录
    public: 静态文件,如前端页面
    routes: 路由文件
    views: 页面文件
    app.js: 入口文件
    handles.js: 请求类型以及路由处理函数

    代码实现

    app.js导出一个httpServer对象,用于创建服务器

    const handle = require('./handle').handle;
    const routeHandle = require('./handle').routeHandle;
    
    let app = function(req, res) {
        res.setHeader('Access-Control-Allow-Origin', '*');
        res.setHeader('Access-Control-Allow-Headers', '*');
    
        handle(req, params => {
            routeHandle(req, res, params);
        })
    }
    
    module.exports = app;
    

    bin/env引入app并且创建服务器,这里简单创建服务器并监听9090端口.后面可以添加各种配置

    const http = require('http');
    const app = require('../app');
    
    http.createServer(app).listen(9090);
    

    handle.js定义了app.js所调用的函数,用于处理不同的请求方式以及对应的路由处理

    const url = require('url');
    const querystring = require('querystring');
    const routerList = require('./routes/list');
    
    function handle(req, cb) {
        let data = '';
    
        req.on('err', err => {
            return console.error(err);
        }).on('data', chunk => {
            data += chunk;
        }).on('end', () => {
            requestHandle(req, data, cb);
        })
    }
    
    function requestHandle(req, data, cb) {
        switch(req.method){
            case 'GET':
                let query = url.parse(req.url, true).query;
    
                cb(query);
    
                break;
    
            case 'POST':
                if(data.length > 1e6){
                    return req.connection.destory();
                }
    
                let params = querystring.parse(data);
    
                cb(params);
    
                break;
    
            default:
                break;
        }
    }
    
    function routeHandle(req, res, params) {
        let pathname = url.parse(req.url, true).pathname,
            routerItem = routerList.isRouter(pathname);
    
        if (routerItem) {
            return routerList.list[routerItem](res, pathname, params, req.method);
        }
    }
    
    module.exports = {
        handle,
        routeHandle
    }
    

    routes文件包含routes.js以及handle文件夹,handle文件夹中的文件名为要处理的路由名.
    routes.js具体实现:

    class List{
        '/'(res) {
            res.end('hello');
        }
    }
    
    const routerAttrList = Object.getOwnPropertyNames(List.prototype);
    
    function isRouter(pathname) {
        return routerAttrList.find((item, index) => {
    
            if(pathname === item || pathname.startsWith(item) && (item !== '/')){
                return item;
            }else{
                return false;
            }
        })
    }
    
    module.exports = {
        isRouter,
        routerAttrList,
        list: new List()
    }
    

    相关文章

      网友评论

          本文标题:Nodejs基本架构

          本文链接:https://www.haomeiwen.com/subject/ylqbrqtx.html

          热点阅读