最近公司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”,即可領紅包。謝謝支持