简单类express实现

最近公司app的开发又缓慢了下来,于是又重新看node,上一次用node实现个人blog(前端angular)已有两个月了。废话不多说,先谈谈最近对node的新理解。

  • node是属于后端,但与C、Java 、Python等后端不一样。node不属于一门语言,只是一个运行Javascript的平台。这也是官网的描述:

Node.js® is a JavaScript runtime built onChrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem,npm, is the largest ecosystem of open source libraries in the world.

  • 那Node为什么选择javascript为载体语言?
    事实上,在实现 Node.js 之初,作者 Ryan Dahl 并没有选择 JavaScript,他尝试过 C、Lua,皆因其欠缺一些高级语言的特性,如闭包、函数式编程,致使程序复杂,难以维护。
      而 JavaScript 则是支持函数式编程范型的语言,很好地契合了 Node.js 基于事件驱动的编程模型。加之 Google 提供的 V8 引擎,使 JavaScript 语言的执行速度大大提高。最终呈现在我们面前的就成了 Node.js,而不是 Node.c,Node.lua 或其他语言的实现。
      还有一点就是方便推广node,JavaScript作为一门脚本语言,已经广受认可,而且JavaScript最近崛起得比较快,十分热门,有各种前辈使用JavaScript去实现各种功能,node打上这个快车就能很容易打入市场,毕竟前端程序员能用较低成本去达成node入门级,然后搭建个小网站或博客时使用一门语言就可以完成了,后面也容易达成全栈。

正文

express的使用

var express = require('express');
var app = express();
app.listen(3000);

能看出引入express时获得的是一个Function,然后调用获得一个对象,最后调用其listen方法去开启服务

由此我们自己可以这样实现

var http=require('http')
var CreateApplication = function(){};
CreateApplication.prototype.listen=function(port,cb){
     var server = http.createServer(function(req,res){
     });
     server.listen(port,cb)
}
var express = function() {
    return new CreateApplication();
} ;

express路由的使用

var express = require('express');
var app = express();
app.use('/',function(req,res){res.end('hello')});
app.listen(3000);

use的方法是对路由的保存

我们自己可以这样实现,对象创建时初始化一个空数组route,然后调用对象的use方法时把路由添加到route里

var CreateApplication = function() {
    this.route = [];
};

CreateApplication.prototype.use = function(path,fn) {
    this.route.push({
        path:path,
        fn:fn
    })
}

要路由生效的话,只需要在http.createServer里循环route去判断就行

CreateApplication.prototype.listen = function(port,cb) {
    var self = this;
    var server = http.createServer(function(req,res) {
        for(let i=0,len = self.route.length;i<len;i++) {
            let tar = self.route[i];
            if(tar.path == req.url) {
                return tar.fn(req,res);
            }
        }
        res.end('Cannot '+req.method+' '+ req.url);
    });
    server.listen(port,cb)
};

所有代码及验证

var http = require('http');

var CreateApplication = function() {
    this.route = [];
};

CreateApplication.prototype.use = function(path,fn) {
    this.route.push({
        path:path,
        fn:fn
    })
}

CreateApplication.prototype.listen = function(port,cb) {
    var self = this;
    var server = http.createServer(function(req,res) {
        for(let i=0,len = self.route.length;i<len;i++) {
            let tar = self.route[i];
            if(tar.path == req.url) {
                return tar.fn(req,res);
            }
        }
        res.end('Cannot '+req.method+' '+ req.url);
    });
    server.listen(port,cb)
};

var express = function() {
    return new CreateApplication();
}

var app = express();
app.use('/hello',(req,res) => res.end('hello world'));
app.use('/hey',(req,res) => res.end('hey world'))
app.listen(3001,() => {
    console.log('running on port'+3001);
})

如果觉得文章对你有点用的话,麻烦拿出手机,这里有一个你我都有的小福利(每天一次): 打开支付宝首页搜索“8601304”,即可领红包。谢谢支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容