node.js搭建本地服務器的代碼分享

一共存在四個文件: 1. index.js 入口文件, 採用exports 模塊化開發 代碼:html

var server = require('./server');
var router = require('./router');
var routerplay = require('./routerplay');
var ccd = {};
ccd['/'] = router.index;
ccd['/index'] = router.index;
ccd['/file'] = router.file;
server.start(ccd, routerplay.routerplay);

2 .server.js 用來引入http啓動服務 :服務器

var http = require("http");
var url = require("url");
var qs = require('querystring');
var start = function (ccd, routerplay) {
 http.createServer(function (request, response) {
   var lu = url.parse(request.url).pathname;
   var query = url.parse(request.url, true).query;
   console.log(typeof query);
   if(query.id){
     routerplay(ccd, lu, request, response,query);
   }else{
     routerplay(ccd, lu, request, response,qs);
   }
 }).listen(8888);
 console.log("服務器已啓動,監聽8888端口");
}
exports.start = start;

3. routerPlay.js 作分別路由使用 若是不具有這個路由 發送404:模塊化

function routerplay(ccd, pathname, request, response,query) {
  if(typeof ccd[pathname] === 'function'){
    return ccd[pathname](request, response,query);
  }else{
    console.log("沒有找到網頁" + pathname);
    response.writeHead(404, {"Content-Type": "text/plain"});
    response.write("404 Not found");
    response.end();
  }
}
exports.routerplay = routerplay;

4. router.js 各個路由下面的邏輯:post

var fs = require('fs');
var url = require('url');

function index(request, response, query) {
    response.writeHead(200, {
        "Content-Type": "text/html",
        "Access-Control-Allow-Origin": "http://localhost",
        "Access-Control-Allow-Methods": "GET",
        "Access-Control-Allow-Headers": "x-requested-with,content-type"
    });
    if (query.id) {
        var url = './file/' + query.id + '.txt';
        fs.exists(url, function(ss) {
            if (ss) {
                fs.readFile(url, 'utf8', function(error, data) {
                    response.write(data);
                    response.end();
                });
            } else {
                new Error(0, "沒有找到文件");
            }
        })
    } else {
        response.write('參數錯誤請驗證');
        response.end();
    }

    console.log('已響應/' + query.id);
}

function file(request, response, query) {
    var postData = '';
    request.addListener('data', function(postDataChunk) {
        postData += postDataChunk;
    });
    request.addListener('end', function() {
        console.log('數據接收完成');
        if (postData) {
            var params = query.parse(postData);
            if (!params.name) {
                params = JSON.parse(postData);
            }
            if (params && params.name && params.data) {
                console.log('開始存儲');
                var url = './file/' + params.name + '.txt';
                fs.writeFile(url, params.data, function(err, data) {
                    if (err) {
                        console.log(err);
                        response.writeHead(501, {
                            "Content-Type": "text/html",
                            "Access-Control-Allow-Origin": "http://localhost",
                            "Access-Control-Allow-Methods": "GET",
                            "Access-Control-Allow-Headers": "x-requested-with,content-type"
                        });
                        response.write('服務器錯誤');
                        response.end();
                        return;
                    }
                    response.writeHead(200, {
                        "Content-Type": "text/html"
                    });
                    response.write('success');
                    response.end();
                })
            } else {
                response.writeHead(500, {
                    "Content-Type": "text/html",
                    "Access-Control-Allow-Origin": "http://localhost",
                    "Access-Control-Allow-Methods": "GET",
                    "Access-Control-Allow-Headers": "x-requested-with,content-type"
                });
                response.write("數據解析錯誤, 請確認");
                response.end();
            }
        } else {
            console.log('沒有數據')
            response.writeHead(200, {
                "Content-Type": "text/html",
                "Access-Control-Allow-Origin": "http://localhost",
                "Access-Control-Allow-Methods": "GET",
                "Access-Control-Allow-Headers": "x-requested-with,content-type"
            });
            response.write("沒有數據請確認!");
            response.end();
        }
    });

}
exports.index = index;
exports.file = file;
相關文章
相關標籤/搜索