node开发必备基础知识

520 阅读4分钟

本文已参与掘金创作者训练营第三期「话题写作」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

前言

JavaScript 是世界上最流行的编程语言之一。如今,它为数以百万计的网站提供支持,并吸引了成群结队的开发人员和设计师为网络构建功能。JavaScript 已经成为你必须掌握的最佳编程语言之一(我自己说的)。

在最初的 20 年里,JavaScript 主要用于客户端脚本。由于 JavaScript 只能在<script>标签内使用,因此开发人员必须在前端和后端组件之间使用多种语言和框架。后来出现了 Node.js,它是一个运行时环境,包括执行 JavaScript 编写的程序所需的一切。

Node.js 是一个单线程、开源、跨平台的运行时环境,用于构建快速且可扩展的服务器端和网络应用程序。它运行在 V8 JavaScript 运行时引擎上,并使用事件驱动、非阻塞 I/O 架构,使其高效且适用于实时应用程序。

本文我们就来介绍一下node开发中哪些比较好用的但并不是常用的技术

eventemitter

eventemitter是node内置的events模块提供的一个类。 他是node事件流的核心。

很多三方框架都用到了这个类,例如Electron中。父进程(ipcMain)与渲染进程(ipcRenderer)之间的通信,使用的就是eventemitter,ipcRenderer 是一个 EventEmitter 的实例。 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息。 从渲染器进程发送的消息将被发送到该模块。

官方示例

首先注册一个EventEmitter对象,

on(event, listener):为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。

emit(event, [arg1], [arg2]): 按监听器的顺序执行执行每个监听器

const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
  console.log('an event occurred!');
});
myEmitter.emit('event');

其他的方法

addListener(event, listener) 为指定事件添加一个监听器,并把这个放到监听器数组的尾部,可以为同一个事件注册多个监听器。

once(event, listener) 为指定事件添加一个监听器,但是这个监听器只能执行一次,执行完后,自动销毁。

removeListener(event, listener) 为指定事件销毁一个监听器,注意这个的listener必须要和addListener中的listener一模一样。所以最后是把这个listener注册成函数。

var listener = function(stream) {
  console.log('listener');
};
myEmitter.on('event', listener);
myEmitter.removeListener('event', listener);

crypto

在一些场景下,例如使用node做登录注册的时候,我们不可能将密码进行明文传输的,需要加密。之前我们可能会借助第三方包来进行解密加密,crypto模块提供了加密功能,其中包括了用于 OpenSSL 散列、HMAC、加密、解密、签名、以及验证的函数的一整套封装。 当然也不是所有的加密都可以进行解密的。例如hmac 算法和 hash 算法就不可以进行解密。像对称加密算法aes和des则可以进行加密。

可以通过crypto.getHashes()来获取支持的所有加密算法。

示例

md5

let crypto=require('crypto')
let result=crypto.createHash('md5').update('juejin').digest("hex");
console.log(result)

结果: 6fc37ec86b0a6e1500c114639d701c45

加解密

// 加密
let key='123456789abcdefg'
let IV='abcdefg123456789'
let decipher = crypto.createCipheriv('aes-128-cbc', key,IV);
let result= decipher.update('l love juejin', 'binary', 'base64') + decipher.final('base64');
console.log(result)
// 解密
crypted = new Buffer(result, 'base64').toString('binary');
let decipher1 = crypto.createDecipheriv('aes-128-cbc', key, IV);
console.log(decipher1.update(crypted, 'binary', 'utf8') + decipher1.final('utf8'))

Timer 定时器

相信大家在写node的时候会经常使用setTimeout、setInternal、setImmediate,这些函数,你有没有过好奇这几个函数是从哪里来的?

在浏览器中 node

可以看出node中的这几个函数是由Timer模块提供的。 Timer 模块算是node中的基石模块。在node中的I/O等操作,都会使用到Timer,用来记录请求是否超时。

vscode 调试node

点击侧边栏调试按钮

配置调试参数,点击运行和调试,在下拉菜单中选择nodejs环境!

基本上默认就可以了: program 字段指定入口。

点击启动程序,开始测试。