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

配图与本文无关

原生搭建一个服务,最核心的就是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";

具体代码:
代码查看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容