配圖與本文無關
原生搭建一個服務,最核心的就是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,其中的坑有
- 路徑不存在的時候需要自己創建
- formidable上傳圖片使用rename報錯,錯誤代碼:return binding.rename(pathModule._makeLong(oldPath)
解決方法:創建一個公共的文件夾進行存儲
form.uploadDir = "public/upload";
具體代碼:
代碼查看