最近公司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”,即可领红包。谢谢支持