从前端到后端,龙哥讲nodejs基础(一)

当我不在迷惘


五年前,当我还是一个纯粹的前端时,我对于服务器和后端开发可以说是一窍不通。我只是感觉,给我的工作完成就行了—不是我该干的我也没必要去研究。

但是很快我发现,当我需要更好的协作时,又或者我想自己开发一个小型项目几乎是不可能完成的。产品,设计,前端,后端,测试。这不可避免的形成了一个模式,一个禁锢所有的人的思维定式。

我开始想我最一开始学习编程的目的到底是什么,现在的我能做到吗?或者当我离开这个行业的时候,我如何告诉我自己曾经的我究竟创造一些什么。

发现捷径


如果你看过我其他的教程,你应该能明白,编程语言中的php和java我都尝试去学习过。但是我的最终感觉—那些编程语言并不适合前端转型到后端的同学,此类笨重的语言甚至不适合去做快速的迭代开发。

甚至高并发和异步操作,对于这些语言都是一个难以解决的问题。那么,有没有这样的一种开发语言,不但具备媲美php和java类的后端开发能力,又有着能解决高并发和全起步操作—只要把问题转移到前端,那就是我的主场了。

直到我遇到了nodejs。我觉得,我这一生的开发旅途是少不了它的陪伴了。

到底什么是nodejs


讲node之前我们要先说一下引擎。
你可能会问,这跟node有什么关系?我要告诉你的是,引擎是最关键的东西,引擎就好比是,人的基因。你并非是天生独一无二,你的行为模式甚至你的长相都跟你的基因有关系。简单来说,你的基因是什么,你就像什么。

这也就是为什么nodejs这么受欢迎的原因,因为nodejs的引擎是chrome—v8。所以nodejs所有语法基本上都跟es6的标准一模一样。然后其实你只需要理解什么是线程,什么是模块,怎么处理http请求就行了。这个东西对于前端开发来说可以说,天生就非常友好。对于后端人员来说——还是算了吧。那是一门完全不一样的语言。

首先我要告诉你的是,node可不是只能处理web端的服务。他在现今世界上大有可为。

今天我们将会从最基本的原理上了解node。

基于模块


nodejs是一个包依赖的语法。没错你没有看错,跟你之前用的vuecli是一模一样的。
vuecli通过webpack封装了一套东西——webpack也是基于node的,只不过他的写法换了换。

现在我们要使用最原生的node来开发。

下面是一个启动http服务的例子,你不用理解他具体怎么应用。
咱们就看看他的语法,他先require了一个模块,然后调用了一个方法。
是不是跟es6一模一样?

如果你熟悉这个写法,那么node对于你来说几乎毫无难度。后面我们将会深入讲解node原理和各种包应用。

var http = require('http');
http.createServer(function handler(req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

在nodejs中,几乎所有操作都是基于模块的,你加载哪个模块,就可以调用哪个模块的方法。就这么带劲。

非阻塞加载


接下在咱们讲一个nodejs最牛逼的地方。
nodejs跟php,java或者python都不一样的地方再于。他是个全异步非阻塞语言。
如果有人问你,node最优秀的地方在哪,你就可以这样回答他。

因为它是全异步的,它天生就具备解决高并发的基因,而不需要像其他语言一样需要某种解决方案。要注意的是,nodejs只有一个线程,却可以像多线程一样实现各种功能,因为nodejs的底层有一个线性池,线性池的原理我们会在后面讲到。

好的,我们来看一个阻塞和非阻塞的例子。

阻塞写法

const fs = require('fs');
const data = fs.readFileSync('/file.md'); // 在这里阻塞直到文件被读取
console.log(data);
moreWork(); // 在console.log之后执行

非阻塞写法

const fs = require('fs');
fs.readFile('/file.md', (err, data) => {
  if (err) throw err;
  console.log(data);
});
moreWork(); // 在console.log之前执行

在nodejs中,你可以自由切换到底是阻塞还是非阻塞。非阻塞的好处就是,如果你一个函数报错了,但是后面的不受影响,因为他们是并行执行的。
如果是阻塞,一旦第一个出问题了,后面你就不用想执行了,全部都会卡死。

好了,今天就先讲这么多了,后面我们将会慢慢的解开nodejs的神秘面纱,想提升自己的技术吗,来跟龙哥一起努力吧!

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

推荐阅读更多精彩内容