nodejs 学习笔记

本文深入解析Node.js的package.json配置,npm安装与管理,常用模块如lodash、puppeteer的功能,以及异步编程模式如Promise和流读取机制。探讨了Node.js在现代开发中的角色,包括作为中间层和构建工具的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.package.json

(1)波浪号~+指定版本:比如 “babel-plugin-import”: “~1.1.0”,表示安装1.1.x的最新版本(不低于1.1.0),但是不安装1.2.x,也就是说安装时不改变大版本号和次要版本号

(2)^+指定版本:比如 “antd”: “^3.1.4”,,表示安装3.1.4及以上的版本,但是不安装4.0.0,也就是说安装时不改变大版本号。

(3)如果入口(main)未指定,那么就默认加载index.js

2.npm常用功能

1.install

1.npm install == npm i
npm会根据package.json配置文件中的依赖配置下载安装至node_modules文件夹

2.-global == -g
全局安装,安装后的包位于系统预设目录下
不会在项目node_modules目录中保存模块包
不会将模块依赖写入devDependencies或dependencies 节点
运行 npm install 初始化项目时不会下载模块

3.--save == -S
安装的包将写入package.json里面的dependencies,dependencies:生产环境需要依赖的库

4.--save-dev == -D
安装的包将写入packege.json里面的devDependencies,devdependencies:只有开发环境下需要依赖的库

3.node实用模块

1.lodash,可以深拷贝

_.cloneDeep(value)

2.randexp,根据正则生成字符串(随机)

const RandExp = require('randexp');
console.log(new RandExp(/[1-9]/).gen());

3.cheerio,作为后端的jquery,可以操作dom元素,避免书写复杂的正则

const cheerio = require('cheerio')
$('img[class="ui image lazy"]').each(function(i,item){
	let obj ={
		href: $(this).attr('data-original'),
		alt: $(this).attr('alt').slice(0,12).replace(/[<>"\?\/\:&\|\\\*^%$#@\-]/g,"")
	}
})

4.Puppeter,生成无头浏览器作为自动化测试或者爬虫的工具,还可以抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))。

const puppeteer = require('puppeteer');(async () => {
	const browser = await puppeteer.launch({
	  headless:false
	});
	const page = await browser.newPage();
	await page.goto('https://www.dygod.net/');
	//await page.screenshot({path: 'example.png'});
	
	//eval,返回dom内容
	var ans = await page.$$eval("a>img",function(data){
		var arr = [];
		data.forEach(function(item,i){
			arr.push(item.src);
			// console.dir(item.src);
		})
		return arr;
	})
	let page2 = await browser.newPage();
	//console.log(ans)
	await page2.goto(ans[1]);
	
	//.$$只能返回dom的handle
	var search = await page.$$('.searchl>p>input');
	//console.log(eleHandles)
	
	await search[0].focus();
	
	await page.keyboard.type('香肠');
	
	var btn = await page.$$('.searchr>input');
	
	await btn[0].click();
	//await page.goto(arr[1].currentSrc);
	/* page.on('console',function(...rest){
		console.log(rest);
	}) */
	//await browser.close();
})();

5.bagpipe
可以动态添加队列的多函数并行模块
6.heapdump
用于打印内存快照
7.mimi
8.assert
断言

const mime = require('mime');

console.log(mime.getType('asdasd.txt'))//text/plain

8.cluster
创建node进程集群

4.node函数规范

回调函数一般作为异步函数的最后一个参数出现:

function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }

回调函数的第一个参数为异常

5.Promise/Deferred模式

Deferred主要用于内部,用于维护异步模型的状态,Promise则用于外部,通过then方法暴露给外部以添加自定义逻辑。

6.buffer

var str = '深入浅出node.js';
//var buf = new Buffer(str,'utf-8')
//这种方式已经弃用
var buf = Buffer.from(str)

//var buf = new Buffer(10)
//这种方式已经弃用
var buf2 = Buffer.alloc(10);//大小为10的空buffer

console.log(buf,buf.length)

乱码的产生,由于buffer截取时没有截取到中文字符的完整三个字节,就会产生乱码

var fs = require('fs'); // 载入fs模块

var reader = fs.createReadStream('input.txt',{highWaterMark:11});
var writer = fs.createWriteStream('output.txt');

reader.on('data',function(chunk){
	console.log(''+chunk)
})
//菜鸟教�
//�官网地�
//��:www.ru
//noob.com
reader.pipe(writer)

//解决办法:reader.setEncoding('utf-8')
//原理是每次data事件如果发现字节不完整就添加到下次data,这个工作由内部的decoder对象完成
//菜鸟教
//程官网地
//址:www.ru
//noob.com

//解决方法2
var buf = Buffer.concat(chunks);
console.log(buf)
console.log(buf.toString())

7.HTTP模块的请求对象与相应对象

ServerRequest用于读操作,ServerResponse用于写操作

8.node的特点

1.事件驱动
2.非阻塞io

node在现代开发的作用。
1.作为中间层,渲染html模板,对接后端。
2.作为项目构建的工具(webpack、vue-cli都是用node写的)

9.流读取

存在的意义是有些文件过大不适合放在内存中,因此不能一次读

10.axios gbk->utf-8

axios({
	method: 'get',
    url: httpUrl,
    responseType: 'arraybuffer'
}).then(function(res){
	console.log(iconv.decode(res.data, 'gbk'))
},function(err){
	console.log(err)
})

11.文件名正则处理

.slice(0,12).replace(/[<>"\?\/\:&\|\\\*^%$#@\-]/g,"")

12.nodemon

自动重启服务器模块,启动时用nodemon代 替npm就行

13.既然有相对路径为什么要用__dirname和__filename

相对路径指的是相对node执行时的目录,因此如果要不执行当前目录下的脚本用相对路径肯定是有问题的。
而__dirname会强行指向当前文件目录的绝对路径,因此不在当前目录下执行脚本,脚本路径也不会出错。
扩展:对于requrie()加载模块的不会有影响

Node-RED是工业网物联网的重要组成部分,我最开始接触Node-RED,也算是一个偶然的机会吧,上班后领导安排我的第一个任务就是调研一下Node-RED,我之后上网查了一下,那个时候网上相对于Node-RED的资料也比较少,只知道它是IBM公司的一个开源项目。直到最近,发现许多大公司的产品都支持Node-RED,比如西门子公司的IoT2000,研华公司的WISE PaaS 网关,美国OPTO 22等设备中都安装了Node-RED,表明它在工业物联网和控制中已经广泛应用了。 那么工业物联网为什么要用它?它又处于工业物联网那个层次?它具有哪些特性?它帮助物联网解决了什么问题?为什么说它是柔性动态可重构的解决方案呢? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本门课程,老师将带领你从Node-RED的发展,工业物联网定位开始讲解,并带领着大家进行手把手安装Node-RED,实际操作演练Node-RED,并搭建一个物联网小平台,给大家带来更好的学习效果。  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 为了能够让小伙伴们快速了解本门课程的结构,本门课程从以下几个方面展开:Node-RED入门Node-RED安装与配置Node-RED教学实战Node-RED的优势与不足Node-RED能为我们带来什么Node-RED总结与展望
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值