0%

在Node.js中,fs模块提供了对文件系统的访问功能,我们可以利用它来实现配置文件的读取和写入操作。正好用到,就记录一下。

准备工作

确保你的项目目录已经安装了做了npmpnpmyarn等node相关初始化,存在node_modules文件夹,这样就可以使用fs

1
const fs = require('fs');

接下来就是定义路径,我是用到年月来定义路径,并放在当前路径的storeConfigs下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const path = require('path');
const date = getDate();

// 文件夹路径 ./storeConfigs/${date.year}/${date.month}
const folderPath = path.resolve(__dirname, 'storeConfigs', `${date.year}`, `${date.month}`);

// 用date.day来定义文件名 ./storeConfigs/${date.year}/${date.month}/${date.day}
const aFilePath = path.resolve(folderPath, `${date.day}`);


// 获取当前日期
function getDate() {
const currentDate = new Date();
const year = currentDate.getFullYear();
const month = currentDate.getMonth() + 1;
const day = currentDate.getDate();
return { year: year, month: month, day: day };
}
阅读全文 »

在构建应用程序时,部署API是一个关键的步骤。API部署允许其他应用程序或用户与您的服务进行交互,并访问所需的功能和数据。本文将介绍一个示例,展示如何使用Node.js和Express框架来部署一个简单的API。

准备工作

  • 安装Node.js:用于运行JavaScript代码的运行时环境。
    1
    2
    sudo apt update
    sudo apt install nodejs
  • 安装npm(Node Package Manager):用于管理和安装Node.js模块。
    1
    sudo apt install npm

创建API脚本

编写脚本

在服务器想要存放API脚本的目录下,创建API脚本(这里我用的是server.js),其中{ TemplateName, site }为请求API传递的json参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const express = require('express');
const cors = require('cors');
const { exec } = require('child_process');
const { updateHostConfigs } = require('./configManager');

const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());
app.use(cors());

app.post('/deploy', (req, res) => {
const { TemplateName, site } = req.body;
if (!TemplateName || !site) {
console.log({ message: 'TemplateName或site未定义' });
res.status(200).json({ message: '拒绝请求,缺乏必要参数!' });
} else {
// 执行deploy.bat脚本的API端点
const command = `bash deploy.sh ${TemplateName} ${site}`;
console.log(`接收到请求指令:${command}`);
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`执行命令时出错:${error.message}`);
}

console.log(`命令执行成功:${stdout}`);
res.status(200).json({ message: '部署脚本成功执行' });
});
}
});

// 启动服务器
app.listen(PORT, () => {
console.log(`API服务器正在运行,监听端口:${PORT}`);
});
阅读全文 »

当您使用多个Node.js版本和多个包管理器时,管理和切换它们可能会变得复杂。为了解决这个问题,开发者社区提供了一些工具来帮助我们轻松地管理Node.js版本和包管理器。两个常用的工具是NVM(Node Version Manager)和NRM(NPM Registry Manager)。本文将介绍它们的使用方法和主要功能。

操作系统:Windows

NVM(Node Version Manager)

什么是NVM?

NVM是一个用于管理Node.js版本的工具。它允许开发者在同一台机器上同时安装和切换不同的Node.js版本。无论是在开发环境中测试不同版本的应用程序,还是在维护多个项目时,NVM都能提供便利。

Windows安装NVM

在终端中执行以下命令下载安装nvm-windows

1
https://github.com/coreybutler/nvm-windows
阅读全文 »

该文章为私密文章,仅供个人学习记录暂不对外开放~
阅读全文 »

构建JSON序列化后符号变化的方案

问题描述

在进行JSON序列化时,有时候会出现符号变化的问题,例如双引号或单引号被转义或丢失的情况。情况是这样的,我在作配置生成器过程中用到了默认配置, 属性用做内容填充对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 默认配置
const configsData = {
"1_minigame": {
host: `www.a0.com`,
data: { name: `A0`, logo: `${templateName}/a0` },
html: {
htmlTest:``,
hd_index:``,
hd_details:``,
hd_category:``,
hd_play:``,
ad0_0:``,
ad0_1:``,
ad0_2:``,
ad0_3:``,
ad0_4:``,
ad1_0:``,
ad1_1:``,
ad1_2:``,
}
}
};

期间我创建了原配置对象的深层副本,输出内容后,反引号变成了双引号,

1
2
const templateConfig = JSON.parse(JSON.stringify(configsData[templateName]));
console.log(templateConfig)

于是在做填充内容时,双引号里面的内容要是包含双引号或单引号,放到编译器编译器就会报错。

阅读全文 »

在Web开发中,图片懒加载可以延迟加载页面上的图片,以提高页面加载性能和用户体验。用户在页面加载时不立即加载所有图片,而是等到图片即将进入用户视野时再进行加载。通过延迟加载图片,可以减少初始加载的资源数量,提高页面的加载速度,特别适用于包含大量图片的网页。

定义滚动监听和加载函数:

思路:我们定义一个名为runLazyLoad的函数,它通过监听滚动事件实现了图片的懒加载功能。当页面滚动时,函数会计算滚动距离,并根据一定规则加载新的图片。

函数内部的loadLazyLoadedImages函数用于实际加载图片。它首先获取所有带有data-src属性的图片元素,然后逐个加载这些图片,直到达到指定的加载数量。从而达到懒加载效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let previousLoadCount = 0;

function runLazyLoad(origin) {
loadLazyLoadedImages(origin, 0);
window.addEventListener('scroll', function () {
const scrollDistance = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
if (scrollDistance > 0) {
const initialLoadCount = Math.floor(scrollDistance / 300) * 9 + 9;
const newLoadCount = initialLoadCount - previousLoadCount;
if (newLoadCount > 0) {
loadLazyLoadedImages(newLoadCount);
previousLoadCount = initialLoadCount;
}
}
});
}

Math.floor(scrollDistance / 300) * 9 + 9;: 每滚动300的距离就加载9张图片进来。

阅读全文 »

前提准备

框架地址: Midway-Vue3-SSR

基于 Midway、Vue 3 组装的 SSR 框架
简单、易学易用、方便扩展、集成Midway框架,您一直想要的Vue SSR 框架。

使用系统:Windows

安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 克隆项目
git clone https://github.com/lqsong/midway-vue3-ssr.git

# 进入项目目录
cd midway-vue3-ssr

# 复制文件
copy src/config/config.default.ts src/config/config.local.ts # 启用或修改里面的参数
copy src/config/config.default.ts src/config/config.prod.ts # 启用或修改里面的参数
copy web/.env.development web/.env.development.local # 启用或修改里面的参数

# 全局安装pnpm:
npm install pnpm -g

# 安装环境依赖
pnpm i

# 启动默认项目
pnpm dev
阅读全文 »

Hexo

在添加openssh成功后,hexo d报错:

1
2
3
4
5
6
7
8
9
10
11
12
ssh: Could not resolve hostname github.com: \262\273\326\252\265\300\325\342\321\371\265\304\326\367\273\372\241\243
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (D:\Hexo\CrfBlog\node_modules\hexo-util\lib\spawn.js:51:21)
at ChildProcess.emit (node:events:513:28)
at ChildProcess.cp.emit (D:\Hexo\CrfBlog\node_modules\cross-spawn\lib\enoent.js:34:29)
at Process.ChildProcess._handle.onexit (node:internal/child_process:293:12)

报错时间:2024.03.08

阅读全文 »

准备条件:

  • 私钥和公钥
  • openSSH 服务端和客户端安装

安装好openSSH后,在电脑开始搜索框输入关键词PowerShell,找到Windows PowerShell右键以管理身份运行

启用服务

1
net start sshd

添加防火墙开放22端口规则

1
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
阅读全文 »

在html使用阿里云添加WebTracking采集 reffer来访标头

HTTP GET请求

1
curl --request GET 'http://${project}.${host}/logstores/${logstore}/track?APIVersion=0.6.0&key1=val1&key2=val2'
参数 是否必填 说明
${project} Project名称。
${host} 日志服务所在地域的Endpoint。更多信息,请参见服务入口。
${logstore} Logstore名称。
APIVersion=0.6.0 保留字段。
topic=yourtopic 指定日志主题。
key1=val1&key2=val2 您要上传到日志服务的键值对(Key-Value),支持设置多个键值对。

通过上述方式获取日志库请求链接 如

1
http://${project}.${host}/logstores/${logstore}/track?APIVersion=0.6.0&key1=val1&key2=val2
阅读全文 »