|-摘 NodeJs相关内容
这里整理下NodeJs的相关内容。
这里整理下NodeJs的相关内容。
有些项目对Nodejs的版本有要求,现在2023年Nodejs最新的已经是v20版本了
https://gitee.com/raingad/im-chat-front/ 这个项目在运行npm install时提示只支持node的v14-v19不支持v20,强行安装后,运行npm run serve 出现报错说defineConfig不是方法。
const { defineConfig } = require("@vue/cli-service"); module.exports = defineConfig({ transpileDependencies: true, lintOnSave: false, runtimeCompiler: true, productionSourceMap: false, publicPath: process.env.NODE_ENV === 'production' ? './' : '/', assetsDir: 'assets', devServer: { https: true, // 开启https port: 3001, // 端口号 host: '0.0.0.0', // 项目地址 }, css: { loaderOptions: { sass: { sassOptions: { outputStyle: 'expanded' } } } } });
于是我只能卸载了Node的v20,重新下载了node的v19版本安装。之后运行npm run serve就ok了
但是打开页面后有报错...
|--转 Windows 上nodejs npm 设置全局变量安装路径及环境配置
安装 nodejs 的时候最好不要安装到默认的C盘下。但是一般情况下安装node.js环境,程序会自动把 npm 全局模块的路径设置在系统盘(一般默认是C盘)。
查看 npm 默认路径配置
查看 npm 路径配置,npm 的默认安装路径:C:\用户\用户名\AppData\Roming\npm
npm config ls
如果是第一次使用 npm 安装 npm 安装包的话,在配置中只会看到prifix的选项,就是 npm 默认的 全局安装目录。但是如果多次使用 npm 安装包的话,就会看到cache和prefix两个路径。
配置npm在安装全局模块时的路径和缓存cache的路径
默认情况下,在哪个文件夹下运行 npm,npm 就在当前目录创建一个文件夹 node_modules,然后将要安装的程序安装到文件夹node_modules里面。这样就是每次下载或安装插件啥的都会自动创建这个 node_module 文件夹,有点乱,所以下面就可以改变这个安装程序的默认路径。
在执行例如npm install webpack -g等命令全局安装的时候,默认会将模块安装在 C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache中,不方便管理且占用C盘空间,如下图所示:
所以这里配置自定义的全局模块安装目录,在node.js安装目录下新建两个文件夹 node_global和node_cache,然后执行如下两个命令:...
|--转 提示node: command not found
sudo ln -s /www/server/nodejs/v14.17.6/bin/node /usr/bin/node
找到node路径,把他放到
sudo ln -s /www/server/nvm/versions/node/v14.16.1/bin/node /usr/bin/node...
|--转 解决nodejs mysql Error: Connection lost The server closed the connection
nodejs连接mysql数据库一段时间(具体多长时间不知道是在哪里设置的)无操作会断开连接,导致后续执行sql时会报错:数据库服务器已经关闭了连接,为此用下面方法解决。 20241002
var mysqlConfig = { host : 'localhost', user : 'test', password : '123456', port: '3306', database: 'test' }; var connection = mysql.createConnection(mysqlConfig); connection.connect(); connection.on('error',err=>{ console.log('Re-connecting lost connection: '); connection = mysql.createConnection(mysqlConfig) }); ......
上面是我实测有效的方法 20241002
下面是转载的内容
Node连接MySql,会出现几分钟无动作则自动关闭连接,导致Node服务器Down掉。 报错信息: 解决方法:将sql文件修改为连接池的写法,查询语句也是。 参考链接:https://www.npmjs.com/package/mysql2 具体实现: 原连接写法(db.js):写法没错,但因为数据库无操作断开机制所以还是有问题。看了其他的博客,尝试做了异常处理,还是会出现报错。
const mysql = require("mysql"); const sqlConfig = { host: "localhost", user: "root", password: "root", database: "campus", }; var connection; function handleDisconnect() { connection = mysql.createConnection(sqlConfig); connection.connect(function (err) { if (err) { console.log("error when connecting to db:", err); setTimeout(handleDisconnect, 2000); } }); connection.on("error", function (err) { console.log("db error", err); if (err.code === "PROTOCOL_CONNECTION_LOST") { handleDisconnect(); } else { throw err; } }); } handleDisconnect(); export default handleDisconnect;
更改后使用连接池的写法:(db.js) ...
|--原 理解setInterval和setTimeout以及JS执行机制
今天先讲讲,set看看这段代码会输出什么执行的时间是多久
function test(){ console.log('开始'); seconds=1; var timer = setInterval(() => { console.log('内部'); seconds--; if(seconds <= 0){ clearInterval(timer); } }, 5000 ); console.log('函数尾部'); } test();
输出的结果是
开始 函数尾部 内部 [Finished in 5.3s]
注意,输出“函数尾部”后,经过了5秒之后输出“内部”,之后结束。...
|--摘 CentOS环境Nodejs的yum安装并手动升级到最新版本(方法长期有效)
2022年5月node的稳定版本是16.5.0,Cenots默认安装的是10.23.1,有些npm安装的扩展已经不支持这么低的版本,所以升级到最新稳定版本。
先确认系统是否已经安装了epel-release包:
yum info epel-release
如果有输出epel-release的已安装信息,则说明已经安装,如果提示没有安装或可安装则安装
yum install epel-release
安装完后,就可以使用yum命令安装nodejs了
yum install nodejs -y
发现,版本比较低。
node -v
v10.23.1
按照如下步骤一步一步来:
1. 清缓存
npm cache clean -f
2. 安装node版本管理工具'n'
npm install n -g
3. 安装node最新的稳定版本(我这里就是用的这个,安装时显示的是16.15.0)
n stable
或者可以安装最新版本
n latest
或者制定版本(比如:安装node指定版本8.9.4)
n 15.1.0
4. 检查安装结果,发现升级的版本没加到path里面 ...
|--转 node同步查询数据库(mysql)
mysql模块默认异步操作,在写一些简单脚本时会比较痛苦,可以通过async/await和Promise封装成同步操作
async function query (connection, sql) { return new Promise((resolve, reject) => { connection.query(sql, function (error, results) { if (error) reject(results); resolve(results); }); }) }
使用时需要使用变量接收返回值,并注意加上await
var connection = mysql.createConnection({ host : 'localhost', user : 'test', password : '123456', port: '3306', database: 'test' }); connection.connect(); let result = await query(connection, 'select 1 from dual'); console.log(result); // [ RowDataPacket { '1': 1 } ] connection.end();
引用自:...
|--转 Puppeteer模拟浏览器时禁止图片加载
Puppeteer模拟浏览器时禁止图片加载 - 简书 (jianshu.com)
我现在做的项目需要对于网站进行实时刷新和数据获取,
一开始没什么问题,可是有一天突然被警告说由于经常的刷新和访问页面导致对方的图片服务器崩溃了。。。
由于我也不需要访问图片的需求,所以要改进为不加载图片的刷新页面和数据获取。...
|--转 ddddocr验证码识别-java&nodejs&python
nodejs版本
安装包
npm install ddddocr
运行会报错TypeError: Ddddocr.create is not a function,
需要 修改 ddddocr/dist/index.js 最后一行exports.default = DdddOcr;改为 module.exports = DdddOcr;
ddddocr验证码识别-java&nodejs&python_nodejs ddddocr-CSDN博客
1. java版本
参考 https://gitee.com/GCSZHN/ddddocr-for-java?_from=gitee_search java 11 改造使用 jdk1.8 https://gitee.com/bestman_456/ddddocr4j
引入依赖
<dependency> <groupId>com.yl</groupId> <artifactId>ddddocr4j</artifactId> <version>1.0.0</version> </dependency>
DDDDOcrUtil
package com.yl.util; import com.yl.ddddocr.OCREngine; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Base64; /** * DDDDOcrUtil * * @author liuxb * @date 2023/4/28 0:09 */ @Slf4j public class DDDDOcrUtil { private static final OCREngine ocrEngine = OCREngine.instance(); /** * 获取识别的验证码 * * @param base64 验证码base64字符串 * @return */ public static String getCode(String base64) { byte[] bytes = Base64.getDecoder().decode(base64); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); try { BufferedImage bufferedImage = ImageIO.read(bis); return ocrEngine.recognize(bufferedImage); } catch (IOException e) { log.error("识别验证码异常", e); return StringUtils.EMPTY; } } /** * 获取识别的验证码 * * @param inputStream 验证码图片输入流 * @return */ public static String getCode(InputStream inputStream) { try { BufferedImage bufferedImage = ImageIO.read(inputStream); return ocrEngine.recognize(bufferedImage); } catch (IOException e) { log.error("识别验证码异常", e); return StringUtils.EMPTY; } } }
2. nodejs版本
安装包 npm install ddddocr 安装的包,报错,需要 修改 ddddocr/dist/index.js 最后一行为 module.exports = DdddOcr; 测试 const Ddddocr = require(ddddocr) var fs = require(fs) //引入fs模块 var path = require(path) var imgDir = "D:/verifies" var array = fs.readdirSync(imgDir) array.forEach(item => { var file = path.join(imgDir, item) Ddddocr.create().then(async ddddocr => { // 也可传入 文件路径 const verifyCode = await ddddocr.classification(file); console.log(file, verifyCode) }) })
3. Python版本
pip install ddddocr import os import ddddocr # common_old.onnx, beta=True common.onnx ocr = ddddocr.DdddOcr() # dirPath = rD:\upload\img dirPath = rD:\verifies for ff in os.listdir(dirPath): path = os.path.join(dirPath, ff) with open(path, rb) as f: img_bytes = f.read() res = ocr.classification(img_bytes) print(路径: + path + , 识别出的验证码为: + res)
...
|--转 JS for 循环里的 await
结果依旧,这说明在普通的 for 循环里,程序会等待上一步迭代结束执行 await 后,再继续下一步迭代。这个和我们的预期一致,for 循环里的 async/await 是顺序执行的;同理也适用于 while、for-in、for-of 等等形式中。
之前有篇我的 blog 提到过 js 的异步发展史:从callback到promise再到async/await。async/await之后的 JS 开始允许我们以一种看似顺序执行的方式书写代码,这让入门 JS 变得更简单,但在一些复杂的场景里比如 for-loop 环境里,async/await还是会有不少坑的。
Warm up
开始前,先写个“菜篮子工程”,getVegetableNum是本文中最基础的一个异步函数——异步获取蔬菜数量:
- const Basket = {
- onion: 1,
- ginger: 2,
- garlic: 3,
- }
- const getVegetableNum = async (veg) => Basket[veg];
知识点:async是一个语法糖,表示把结果包在 Promise 里返回;该异步函数等价于
- function getVegetableNum (veg) {
- return Promise.resolve( Basket[veg] );
- }
OK,我们再试着异步获取三种蔬菜的数量:
- const start1 = async () => {
- console.log('Start');
- const onion = await getVegetableNum('onion');
- console.log('onion', onion);
- const ginger = await getVegetableNum('ginger');
- console.log('ginger', ginger);
- const garlic = await getVegetableNum('garlic');
- console.log('garlic', garlic);
- console.log('End');
- }
最后打印结果如下:
- Start
- onion 1
- ginger 2
- garlic 3
- End
await in a for loop
OK,前言到此为止。现实中开发中,上述代码枚举每一种蔬菜的方式太过冗余,一般我们更倾向于写个循环来调用getVegetableNum方法:
- const start = async () => {
- console.log('Start');
- const arr = ['onion', 'ginger', 'garlic'];
- for(let i = 0; i < arr.length; ++i>){
- const veg = arr[i];
- const num = await getVegetableNum(veg);
- console.log(veg, num);
- }
- console.log('End');
- }
结果依旧,这说明在普通的 for 循环里,程序会等待上一步迭代结束执行 await 后,再继续下一步迭代。这个和我们的预期一致,for 循环里的 async/await 是顺序执行的;同理也适用于 while、for-in、for-of 等等形式中。...
|--摘 nodejs在后台运行和在win7命令行运行
操作系统windows7
运行cmd
最简单的方法是node命令
例如
node test.js
另外还可以用工具 pm2
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能
在nodejs项目目录下运行
npm i pm2
操作方法
pm2 start test.js // 启动 pm2 start test.js-i max //启动 使用所有CPU核心的集群 pm2 stop test.js // 停止 pm2 stop all // 停止所有 pm2 restart test.js // 重启 pm2 restart all // 重启所有 pm2delete test.js // 关闭
这里我执行pm2 start test.js,程序会循环一直执行test.js,不知道为啥,我还是用node命令。 ...
|--转 nodjs 运行npm install .. 时提示:npm WARN saveError ENOENT: no such file or directory, open \...\package.json 问题解决方法
根据错误提示,是系统没有‘package.json’这个文件导致。这个文件的作用就是管理你本地安装的npm包。
所以我们要生成一个package.json文件,执行命令:
npm init
创建package.json文件,系统会提示相关配置(可键入配置,也可直接按回车键,回车即设置默认参数),也可以使用命令:...
|--摘 windows安装Node.js及环境配置
win7支持的最新版本是nodejs-v13.14.0,win8或者win10支持最新的nodejs
一、安装环境######
1、本机系统:Windows 10 Pro(64位)
2、Node.js:v6.9.2LTS(64位)
二、安装Node.js步骤######
1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/
2、选安装目录进行安装
3、环境配置
4、测试
三、前期准备######
1、Node.js简介
简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。
2、下载Node.js
打开官网下载链接:https://nodejs.org/en/download/ 我这里下载的是node-v6.9.2-x64.msi,
此处说明下:新版的Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西...
|--转 centos8安装nodejs
通过官方查询需要安装的版本
https://github.com/nodesource/distributions
在CentOS下获取相应版本的nodejs资源(以NodeJS 14.x为例)
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
运行
sudo yum install -y nodejs
进行nodejs安装
You may also need development tools to build native addons:
sudo yum install gcc-c++ make
To install the Yarn package manager, run:
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo sudo yum install yarn
确认安装成功
node -v
npm -v
安装cnpm
npm install -g cnpm -registry=https://registry.npm.taobao.org
...
|--转 开篇 - 环境安装(@tensorflow/tfjs-node)
安装这个花了老长时间了,网上的办法都测过了,不行, 还是自己研究!下面就是主要安装步骤
(不详细的话,会补充)
安装前提环境
因为要安装 @tensorflow/tfjs-node 前需要一些C++库和python版本的支持 可以在 https://github.com/nodejs/node-gyp 网站中找到安装方法(用如下命令就可一键安装啦!) ...
|--原 在Window上打开谷歌浏览器remote方式
在Window上打开谷歌浏览器remote方式
await opn("http://cn.bing.com",{app: ['chrome','--remote-debugging-port=1234']});
在Window上打开谷歌浏览器remote方式
await opn("http://cn.bing.com",{app: ['chrome','--remote-debugging-port=1234']});
应用名称取决于平台。 不要在可重用模块中硬编码。 例如。 Chrome是OS X上的google chrome,Linux上的google-chrome和Windows上的chrome。...