阅读 8674

学习node前你就该跟人家拉开差距【node专栏01】

专栏课程介绍

此技术专栏文章为从0学习node,并使用node+koa+sequelize+mysql从0到1搭建一个绝对拿的出手的企业级项目(其实自己也是学习~哈哈哈)

此技术专栏分为7天

公众号[前端人],首发

1.学习node前你就能跟人家拉开差距

2.学习koa一定要知道基础知识学习

3.前端人也应该学习的mysql知识

4.学习koa你肯定需要学习sequelize

5.教你搭建一个优秀的koa项目架构

6.不上手写几个接口都不知道自己有多优秀

7.我不用用Docker部署,我怎么知道它有多碉

你学习node为什么总感觉很简单?

今天是第一篇文章,其实对于很多人来说,即使他用node开发了一两年实际的项目,也不一定知道他自己干嘛学习node,在他看来node无非就是能写几个接口而已

对node理解的比较片面,其实造成这种原因,大多是因为他学习node的步骤错了

在他看来,node嘛无法就是那几个api,上手的话直接干就完了,什么koa呀什么egg呀,这不是搞个官方脚手架,一把嗦就完事了么

这种情况下,其实对于很多人为什么学习node都不知道,node能解决什么问题可能都不知道。

这就导致,在你看来node很简单,node就是写几个接口罢了!

node适合在什么场景下运用?

我是这样去学习node,首先我要知道node能解决什么问题?它在什么场景下更加适合.

其实在我看来,先阶段java能干的事情,node几乎都能干,他们之所以没有选择使用node开发,而使用java开发是因为node的周边技术确实还没javan那么成熟,解决方案相对没有那么多而已

比如node配套的数据库大多都只有 mongodb mysql而他们都属于轻量级的数据库,而且mongodb也相对缺少一些更稳定的数据库管理维护的周边工具。而且对于数据量较大的情况下,数据的查询速度

的缺失就更为突出了。其实还有很多其他不完善的点,总的来就导致node在业务开发的选择性中就大打折扣了.

但是对于一些轻量级的应用开发是完全够的,node也基本拥有java语言提供的同样的功能!,当然node在前端工程化中起到了压倒性的作用,这里只对比在应用开发中的优缺点.

学习node前你应该知道这些!

其实谈到node,一定不得不谈的就是前端工程化了,前端工程化也火了好几年了,现在大大小小的公司都在做,如果你是一个公司的前端负责人,那这肯定是你做为技术负责人一定重要的kpi,

其实也是你一定要去实施的部分。因为这确实对开发人员的开发人员的开发效率有这本质性的提升。

那前端工程化,其实从本质上来说,涉及到的知识点就是:io操作和http请求,所以在学习node的时候,这两部分的知识点,绝对性的要精通(重在理解),仅仅这两本分其实就够我们终生学习的了(开个玩笑,也就是突出他的重要性罢了)。

学习node前,你应该先熟悉这些能力!

以下是node学习的时候,我们应该提前知道的几个能力(api),这样你才知道node能做什么?

fs (文件系统)模块

可以对文件或文件夹读写创建操作、权限控制

node child_process(子进程)模块

NodeJs是一个单进程的语言,不能像Java那样可以创建多线程来并发执行。但单进程也有个问题就是不能充分利用CPU的多核机制,但是可以通过child_process创建多个进程来充分利用CPU多核,完成多进程的操作。

cluster(集群)模块

单个 Node.js 实例运行在单个线程中。 为了充分利用多核系统,有时需要启用一组 Node.js 进程去处理负载任务。

cluster 模块可以创建共享服务器端口的子进程,而这一组的服务进程的总称就叫做集群。希望下次你跟后端讨论技术(撕逼的时候),谈到这个技术点,你能够插的上几句话。

服务集群通常运用在nginx大型服务部署上,为保证服务的正常稳定运行,所以会启动多个服务(也就是一个服务集群)。

dgram(数据报)

dgram 模块提供了 UDP 数据包 socket 的实现,它可以做的场景应用场景有:在线视频、网络语音电话、在线聊天

dns(域名服务器)

可以用来把域名解析出对应的ip

const dns = require('dns');
dns.lookup('baidu.com', (err, address, family) => {
  console.log(`域名对应ip地址==>${address}类型:${family}`);
});
复制代码

events(事件触发器)

可用于创建一个自定义事件监听器,events.on() 用于注册监听器, events.emit() 用于触发事件

   const EventEmitter = require('events');
   const myEmitter = new EventEmitter();
   //监听事件
   myEmitter.on('event', () => {
     console.log('接受到触发事件');
   });

   //触发事件
   myEmitter.emit('event');
复制代码

https(HTTPS)

可创建一个https协议的http服务

const https = require('https');
const fs = require('fs');

//创建服务
https.createServer({
  //证书(证书网上有免费生成的方法)
  pfx: fs.readFileSync('test/fixtures/test_cert.pfx'),
  //证书秘钥
  passphrase: '密码'
},(req, res) => {
  res.writeHead(200);
  res.end('返回给前端的信息');
}).listen(8080);

复制代码

net(网络)

net 模块用于创建基于流的 TCP 或 IPC 的服务器

// 模拟服务端
const net = require('net');

const server = net.createServer((connect) => {
  connect.write('你好\r\n');
  //继续等待连接
  connect.pipe(connect);
});


server.on('error', (err) => {
  throw err;
});

server.listen(8083, () => {
  console.log('服务器已启动');
});
复制代码
// 模拟客户端
const client = net.connect({
      port: 8083
    }, ()=> { 
      console.log('发送信息给服务端!!!');
      client.write('你好鸭!\r\n');
 });

client.on('data', function(data) {
  console.log(`接收到数据${data}`);
});

复制代码

os(操作系统)

os 模块提供了与操作系统相关的实用方法和属性,

可以用来做系统服务器性能监控分析,提供的api也非常强大

const sysConfig=os.cpus();
复制代码

sysConfig 返回数据如下:

  • speed 以兆赫兹为单位。
  • times
  • user CPU 在用户模式下花费的毫秒数。
  • nice CPU 在良好模式下花费的毫秒数。
  • sys CPU 在系统模式下花费的毫秒数。
  • idle CPU 在空闲模式下花费的毫秒数。
  • irq CPU 在中断请求模式下花费的毫秒数。
  • perf_hooks(性能钩子)

    该 API 目的是支持node高精度性能指标的收集,保存和获取性能相关的度量数据。

    也可以用来做系统服务器性能监控分析(比如当前node服务是否正常,尤其是在SSR的时候,需要注意)

    process(进程)

    process 对象是一个全局变量,提供了有关当前 Node.js 进程的信息并对其进行控。

    也可以用来做node服务监控分析(比如当前node服务是否正常,在什么情况下中断了,中断的原因是什么)

    vm(虚拟机)

    vm 模块可在 V8 虚拟机上下文中编译和运行代码。比如力扣刷题,在线刷新的时候,前端提交的代码就可以用vm来创建一个虚拟机执行对应的代码

    zlib(压缩)

    文件压缩或解压文件

    以上部分就是node提供的部分比较实用性的功能,我觉得话点时间多去理解这些,然后当你遇到类似需求的时候,你自然而且就会想到解决方案

    多花时间去思考没个api能够运用到什么场景,能够做什么需求,和能够创造什么就够了。我相信看了这些,你一定不会再说node简单了。

    比别人能够更好的理解一门技术的运用场景,就是你和别人拉开差距的开始

    这篇文章就到这里了,下一篇继续!

本文使用 mdnice 排版