专栏课程介绍
此技术专栏文章为从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 排版