NestJS 使用 sheetjs 遇到的坑
前景提要一个时区与零时区的时差在各个历史时期是不同的。 知乎。
为了解决这个问题 sheetjs 使用了偏差值。
如果不是对解析的时间对象操作(例:操作 new Date())会导致有偏差值。
举个栗子excel 中 时间字段值为 2022/04/22 22:00:02 ,通过解析后获取到的时间是 2022/04/22 21:59:19,此时就出现了偏差 43s。
分为两种现象
时间类型的字段,读取和导出没有进行任何操作.本情况没有 bug.
1这种情况是因为sheetjs,对解析的时间先减少偏差值,导出时又加偏差值所以没有问题。
时间类型的字段进行操作或者是通过别的方式赋值.本情况有 bug.会出现偏差值
123这种情况是我们直接赋值,所以并没有sheetjs先进行减少偏差值的操作,导出时加了偏差值所以导致时间不一致。例子: new Date() 导出 会比当期时间多43s
解决方案先计算时区偏差值,再判断是否需要使用偏差值
1234567891011const baseDate = new Date(1899, 11, 30, 0, 0, 0);const ba ...
记录一个不是坑的坑
记录一个不是坑的坑之前对接了一个API,接口写好了自测的时候却出现了问题,发现接口调不通。当时我是一个大写的懵圈 😲。
寻坑之路
使用Postman调用接口 正常返回数据。
开始怀疑自己代码写的有问题
用Postman选择自己用的request包生成代码片段,复制到项目中调试,结果还是不通 😑
对比请求发现Postman的请求头中多了User-Agent
取消Postman中的User-Agent,调用接口失败
发现了问题所在。
最后的最后问了一下对接方,原来是对接方对没有User-Agent的请求进行了拦截 GIAO
填坑两种方案
更换使用的包:
换成了nestjs的HttpService,调用接口成功。
看了源码发现HttpService底层使用的是axios,axios判断了在headers中是否存在User-Agent,如果不存在添加自己的User-Agent
123456// Set User-Agent (required by some servers)// Only set header if it hasn't been set in confi ...
xRemindService
xRemindService一个可以自定义提醒标题、内容、时间的项目。
因为想每个小时提醒自己喝水就写了一个项目来搞这个。
开发需求
可以在windows界面弹窗
自定义提醒时间、内容和标题
重复打开时提示
难点没有调用windowsAPI的经验
实现弹窗及隐藏控制台因为没有调用windowsAPI的经验,所以开始bing查询如何调用 windowsAPI才能弹出窗口。
弹窗
通过kernel32.dll的WTSGetActiveConsoleSessionId来获取当前显示的桌面所在的SessionID
通过wtsapi32.dll的WTSSendMessage来让 Session 弹出对话框
隐藏控制台
通过kernel32.dll的GetConsoleWindow来检索与调用进程关联的控制台使用的窗口句柄
通过user32.dll的ShowWindow来控制窗口打状态
1234567891011121314151617181920212223242526272829303132333435363738394041424344public static class I ...
重生之又换服务器了
重生之又换服务器了提前祝大家元旦快乐!
会陆续把之前要写的补齐。
域名还没有买QAQ 还要备案,慢慢来了。
基于NestJS+TypeORM的简单应用(1)
新建 NestJS 项目并实现查询安装 NestJS 并新建 nest 项目
安装 node 和 npm
使用命令新建项目 nest new xStorageServer
添加文件夹
nest g module attachment 生成附件模块
新建文件夹controllers services models
nest g controller attachment --no-spec
nest g service attachment --no-spec
nest g module common 生成公共模块
新建文件夹config、entities、enums
增加 TypeORM
npm i @nestjs/typeorm
npm i typeorm
npm i mssql
在对应的 app.module.ts 中引入
12345678910111213141516171819import { TypeOrmModule } from '@nestjs/typeorm';@Module({ ... import ...
?? 遇到的坑
TypeScript/JavaScript ?? 遇到的坑null undefined NaN 的区别
null
null表示缺少的标识,指示变量未指向任何对象。把null作为尚未创建的对象更好理解。在API中,null常在返回类型应是一个对象,但没有关联的值的地方使用。
undefined
undefined是全局对象的一个属性。它是全局作用域的一个变量。undefined的最初值就是原始数据类型undefined。一个函数如果没有使用return语句指定返回值,就会返回一个undefined值。
NaN
NaN是一个全局对象的属性。编码中很少直接使用到NaN。通常都是在计算失败时,作为Math的某个方法的返回值出现的或者尝试将一个字符串解析成数字但失败了的时候。
??的坑TypeScript使用??时容易忽略的点
123456789let a = undefined;let b = +a;a ?? 0 // 0b ?? 0 // NaNb ? 1 : 0 // 0undefined + string // 拼接字符串undefined + n ...
EF6 监控SQL性能及记录生成SQL
使用方案使用监听接口IDbCommandInterceptor来实现监控SQL性能和记录生成的SQL(也可以使用DbCommandInterceptor来实现)
其他方案
MiniProfiler 详见官方文档
SQL Server Profiler 创建跟踪器即可。
IDbCommandInterceptor实现此接口的对象可以在DbIntercept 中注册,以在实体框架执行命令时接收通知。官方文档
先看一下Github上的源码:(注释没有进行翻译直接Ctrl C V过来的)GitHub
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778namespace System.Data.Entity.Infrastructure.Interception{ using System.Data.Common; /// < ...
Angular入门及实践
准备阶段
Angular需要Node.js的当前版、活跃 LTS 版或维护期 LTS版
下载地址[http://nodejs.cn/download/]
Angular CLI 接近万能的工具 可以创建项目、生成应用、打包、部署等等
打开终端执行以下命令 1npm install -g @angular/cli
安装完成就可以开始愉悦的Angular开发了!
本文用到的Angular API如下
*ngFor 用来遍历数据并动态的添加元素。详细内容参考官网
*ngIf 用于根据表达式的值,在指定位置渲染then 或 else 模板的内容。详细内容参考官网
简单的🌰选择困难症的福音!他诞生了!人是要做选择的,但是你有选择困难症的时候就难受了
当我们饿的时候想吃包子、饺子、馄饨、烧烤、烤肉、火锅等美食,但是又不知道选择哪一个时,我们就会很痛苦,痛苦就会更饿。为了解决这个难题:选择困难症的福音!他诞生了!
因为在公司前端使用的是Angular的所以就选择Angular来开发它。
开发过程创建项目运行命令ng new并提供carousel-app名称作为参数
1ng new c ...
EF Core 3连接SQL Server 2008的坑
虽然是之前遇到的问题,但是还是想记录下来
环境
EF Core 3
SQL Server 2008
问题分页时使用.Skip().Take()会出现异常:
SqlException: ‘OFFSET’ 附近有语法错误。在 FETCH 语句中选项 NEXT 的用法无效
原因分页方式
ROW_NUMBER() OVER() - SQL Server 2008 以上支持
OFFSET FETCH NEXT - SQL Server 2012 以上支持
EF Core 3默认是使用 OFFSET FETCH NEXT 的方式进行分页。
因为使用EF Core 3又是SQL Server 2008 所以导致OFFSET FETCH NEXT关键字不生效产生异常。
解决方案失败的方案使用 UseRowNumberForPaging网上说在配置DbContextOptions时使用UseRowNumberForPaging就可以解决
123456protected override void OnConfiguring(DbContextOptionsBuilder optionsBuil ...
面试印象深刻的问题
十一终于有空来记录这些问题了。
如何快速选出table中奇数行我当时给出的方案是循环整个table中的tr,但是后来面试官说有更简单的方案。
下面来看一下简单的实现方式
简单的方式实现jQuery选择器中我常用的有
#id id选择器
.class class选择器
element 元素选择器
:first 第一个元素
:last 最后一个元素
但是忘记了这两个选择器了
:even 偶数行
:odd 奇数行
不过这两个选择器的索引是从0开始的
举一个简单的例子
123456789101112131415161718192021222324252627282930313233343536373839404142<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="ht ...