基于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服务就搭建完了。

猜你喜欢

转载自blog.csdn.net/zYjmor/article/details/82878463