前端工程师的全栈梦!实现属于自己的express服务器框架!

作为一名专业的前端工程师,我们不仅要实现自己前端业务的技术精进,想要升职加薪?我们除过磨炼自己的前台技术,同样需要在后台方面有自己的理解!我们的目标是:JS迟早一天统治全球!

今天,我来给大家分享一下自己实现express框架的过程!

服务端实现:

//引入 http 模块
const http = require('http');

//创建路由列表
const router = [];
function createRouter(pathname,handel,method){
    router.push({
        pathname,
        handel,
        method
    })
}
class htppServer{
    constructor() {
        //启动服务器
        this.listen(...arguments);
    }
    listen(){
        //创建http服务器
        const app = http.createServer((req,res) => {
            const pathname = req.url;
            //遍历路由列表
            router.forEach(item => {
                if(item.pathname === pathname && item.method.toUpperCase() === 'GET'){
                    item.handel(item.pathname,res);
                }
            })
        })
        //启动http 服务器
        app.listen(...arguments);
    }
    get(pathname,handel,method='get'){
        createRouter(pathname,handel,method);
        console.log(router);
    }
}
module.exports = function yyServer(){
    return new htppServer(...arguments);
}

前端调用:

//引入服务器文件
const express = require('./testServer');
//启动服务器
const app = express(3000);
//解构出promisify --- 使用promise 语法来处理异步嵌套问题
const { promisify } = require('util')
const readfile = promisify(require('fs').readFile);

//解析英文
app.get('/',(req,res) => {
    res.end('hello');
})
//解析文本
app.get('/text',(req,res) => {
    res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'});
    res.end('我是你们的越哥哥');
})

//解析html文件
app.get('/yy',(req,res) => {
    //res.writeHead()  设置服务器向前端返回的响应由 对应文件的解析格式
    res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
    readfile('./demo.html',{encoding:'utf-8',flag:'r'})
    .then( ok => {
        res.end(ok);
    })
    .catch( err => {
        res.end(err);
    })
})
//解析图片
app.get('/img',(req,res) => {
    res.writeHead(200,{'Content-Type':'image/jpg;charset=UTF8'});
    readfile('./下载 (4).jpg','binary')
    .then( ok => {
        res.write(ok,'binary');
        res.end();
    })
    .catch( err => {
        res.end(JSON.stringify(err));
    })
})

对于本文使用的res.writeHead,下面精心解释:

res.writeHead 主要是为了 约定 服务器向前端响应的内容,是文本、html文件、图片等等各种格式的文件。

 方法说明:

 向请求的客户端发送响应头

 并且该函数在一个请求内最多只能调用一次。

 如果不调用,则会自动生成一个响应头。

 基本语法:

 response.writeHead(statusCode, [reasonPhrase], [headers])

 statusCode:表示请求状态,如200表示请求成功。404表示未找到。

 reasonPhrase,headers:写入请求内容格式、编码方式等

 例子:

 该格式可以识别HTML结构,编码格式是UTF-8

 res.writeHead(200,{‘Content-Type’:‘text/html;charset=UTF8’});

 该格式不可以识别HTML结构,是普通文本

 res.writeHead(200,{‘Content-Type’:‘text/plain;charset=UTF8’});

 该格式识别图片

 res.writeHead(200,{‘Content-Type’:‘image/jpg;charset=UTF8’});

 该格式识别样式 

res.writeHead(200,{‘Content-Type’:‘text/css;charset=UFT8’});

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值