美文网首页Web前端之路让前端飞前端开发那些事
使用模块化的思维学习简单的NodeJS路由与文件上传

使用模块化的思维学习简单的NodeJS路由与文件上传

作者: coderLfy | 来源:发表于2017-06-24 21:46 被阅读93次
    配图与本文无关

    原生搭建一个服务,最核心的就是http模块,这个模块也是NodeJS的核心模块,如今都提倡模块化,在这我进行模块化的制作的学习。

    路由的制作简略示意图路由的制作简略示意图

    index.js 模块

    这个模块是一个文件入口模块主要处理引入与路由表

    var server = require('./server.js');// 服务模块
    var router = require('./router.js');// 路由模块
    var requestHandlers = require('./requestHandlers'); // 路由处理处理模块
    
    // 路由表
    var handle = {};
    handle["/"] = requestHandlers.start;
    handle["/start"] = requestHandlers.start;
    handle["/upload"] = requestHandlers.upload;
    
    
    // 开启服务
    server.start(router.route, handle);
    

    server.js 模块:

    这个模块是是用来定义服务规则与开启服务器的
    主要在这里面写入了该如何处理开启服务中的响应,并让指向如何响应

    var http = require('http'); 
    var url = require('url'); 
    
    function start(route, handle){
        http.createServer(function(request, response){
            // url.parse(url) 处理URL
            var pathname = url.parse(request.url).pathname;
            if(pathname === '/favicon.ico'){
            
            }else{
                // 调用路由模块方法
                var content = route(handle, pathname);
                response.writeHeader(200, {'Content-Type': 'text/plain;charset=utf-8'});
                response.write(content);
                response.end();
            }
        }).listen(8080, function(){
            console.log('端口号为8080');
        })
    }
    
    exports.start = start;
    

    写入中文乱码:首先查看自己js是否是utf-8,用记事本重新保存,再不行就在写入头的时候下加入charset=tuf-8;response.writeHeader(200, {'Content-Type': 'text/plain;charset=utf-8'});

    router.js 模块

    这个模块专门处理用户浏览的路由,并让路由响应

    function route(handle, pathname){
        // 处理路由
        if (typeof handle[pathname] === "function") {
            return handle[pathname]();
        }else{
            return "404 not found";
        }
    }
    
    exports.route = route;
    

    requestHandler.js 模块

    这个模块专门处理路由的响应

    /**
     * 路由处理,有几个路由就写几个方法
     */
    function start(){
        return "start";
    }
    function upload(){
        return "upload";
    }
    
    exports.start = start;
    exports.upload = upload;
    

    使用以上路由开始制作图片上传与显示

    升级版路由升级版路由

    修改内容:

    index.js

    之前:存在路由表

    之后:移除路由表,各司其职。

    requestHandler.js

    之前:是路由处理与接口的暴露。

    之后:把入口文件里的路由表转移到这里,暴露路由的接口。把对应处理路由的方法分成更小更细的模块,这样更方便管理与维护。

    server.js

    结构上没有太大的改变都是处理路由与开启服务器

    router.js

    结构上没有太大改变,处理路由让路由响应

    代码使用了formidable.js这是一个处理上传文件的js,其中的坑有

    1. 路径不存在的时候需要自己创建
    2. formidable上传图片使用rename报错,错误代码:return binding.rename(pathModule._makeLong(oldPath)

    解决方法:创建一个公共的文件夹进行存储form.uploadDir = "public/upload";

    具体代码:
    代码查看

    相关文章

      网友评论

        本文标题:使用模块化的思维学习简单的NodeJS路由与文件上传

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