1. 程式人生 > >基於nodejs做一個簡單的http/web伺服器

基於nodejs做一個簡單的http/web伺服器

建立專案環境,執行下面的命令

cd d:
mkdir webapp
cd webapp
npm install http
npm install fs
npm install querystring

目錄結構

服務端程式碼

app.js

/**
 * web服務
 * request 請求資料
 * respond 響應資料
 */
const http = require('http');
const method = require('./method');

http.createServer((request, respond) => {
    /**
     * 
     * 根據http 訊息結構
     * 該處可以自定義結構資料 也可以預設
     * 
     */
    method[request.method](request, respond);
}).listen(3000, function () {
    console.log('監聽埠:%s', 3000);
});

method.js

/**
 * 
 * 方法回撥物件
 * 根據http1.1定義的方法寫  可以自定義請求方法
 * 
 * MYMETHOD:自定義請求方法
 * 
 */
const fuc = require("./fuc");

module.exports = {
    GET: fuc.getFuc,
    POST: fuc.postFuc,
    HEAD: fuc.headFuc,
    MYMETHOD: fuc.mymethodFuc
}

fuc.js

/**
 * 
 * 根據不同請求方法做不同的處理
 * 
 */
const url = require('url');
const querystring = require('querystring');
const getData = require('./data');
const route = require('./route');


module.exports = {
    getFuc: (req, res) => {
        const requestData = url.parse(req.url, true);
        /**
         * 預設
         */
        if (requestData.pathname === '/') {
            requestData.pathname = route.index
        }
        return getData.data(requestData, res);
    },
    postFuc: (req, res) => {
        const requestData = url.parse(req.url, true);
        var params = '';
        req.on('data', (chunk) => {
            params += chunk;
        })
        req.on('end', () => {
            params = querystring.parse(params);
            return getData.data(requestData, res);
        })
    },
    headFuc: (req, res) => {

    },
    mymethodFuc: (req, res) => {

    },
}

data.js

/**
 * 
 * 獲取客服端請求 伺服器返回相應資料
 * 
 * 
 */
const fs=require('fs');

module.exports = {
    data: (req, res) => {
        fs.exists(__dirname.concat(req.pathname), (isexists) => {
            if (isexists) {
                var buf = new Buffer.alloc(10240);
                fs.open(__dirname.concat(req.pathname), 'r+', function (err, fd) {
                    if (err) {
                        return console.error(err);
                    }
                    fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {
                        if (err) {
                            res.writeHead(500);
                            res.end();
                        }
                        if (bytes > 0) {
                            res.end(buf.slice(0, bytes).toString());
                        }
                    });
                });
            } else {
                res.writeHead(404);
                res.end();
            }
        })
    }
}

上面程式碼完成就 在終端執行node app.js 

 至此一個簡單的web服務就搭建完了。