使用 Lodash 过滤 Object 值为 undefind、null 作者: Chuwen 时间: 2023-03-31 分类: JavaScript 评论 ## 功能实现 我们使用 Lodash 的 [omitBy](https://www.lodashjs.com/docs/lodash.omitBy "omitBy") 方法即可实现 参数 1. `object` (Object): 来源对象。 2. `[predicate=_.identity]` (Function): 调用每一个属性的函数。(*也就是当满足这个条件将会被过滤掉*) ```ts const { omitBy } = require("lodash") const filterParams = { day: 1, min: undefined, max: null, age: "" } omitBy(filterParams, (value, key) => value === undefined || value === null) // 运行结果:{ day: 1, age: '' } ```
批量修改 git commit 的作者和邮箱信息 作者: Chuwen 时间: 2023-03-31 分类: Linux 评论 ## 脚本 通过此脚本即可实现一键修改 ```shell #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="填写原来的邮箱" CORRECT_NAME="填写现在的名称" CORRECT_EMAIL="填写现在的邮箱" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags ``` 运行后,然后执行 `git push -f` 即可
Nginx 判断 GET 参数是否为空,如果为空设置默认值 作者: Chuwen 时间: 2023-03-14 分类: Nginx 评论 ## 配置如下 ```nginx // 如果 GET 参数 shop 为空,则设置默认值为 default-shop.com map $arg_shop $get_shop { "" "default-shop.com"; default $arg_shop; } server { listen 80; server_name example.com; index index.html; root /www/wwwroot/example.com; location { // 使用变量 add_header X-Shop $get_shop; } } ```
Axios 异常拦截器 - 部分请求自定义处理异常 作者: Chuwen 时间: 2023-02-24 分类: TypeScript 评论 ## 现状 项目当前的 `request.ts`: ```ts import toast from "./toast" const request = axios.create({ baseURL: "https://api.nowtime.cc", responseType: "json", timeout: 12_000 }) // 响应拦截器 request.interceptors.response.use( response => { // TODO 响应拦截器相关操作 return response }, error => { // 处理网络错误 if ( error.code === "ECONNABORTED" || error.message === "Network Error" || error.message.includes("timeout") ) { toast("Network timeout", 5e3, true) return Promise.reject(error) } if (error.response) { // TODO 处理 API 响应的错误 const { status } = error.response if (status === 500) { toast("Server error", 5e3) } // ...... } return Promise.reject(error) } ) export default request ``` 但是上面的代码有些弊端,比如有一些请求需要自定义处理异常的,并不需要弹出 `toast`,那么我们就需要这么去实现 ## 实现代码 新增 `axios.ts` 文件,并粘贴如下代码: ```ts import "axios" declare module "axios" { // 扩展 AxiosRequestConfig interface export interface AxiosRequestConfig { catchHandler?: boolean;// 是否开启自动处理异常 } } ``` `request.ts`: ```ts import toast from "./toast" const request = axios.create({ baseURL: "https://api.nowtime.cc", responseType: "json", timeout: 12_000 }) // 响应拦截器 request.interceptors.response.use( response => { // TODO 响应拦截器相关操作 return response }, error => { // 处理网络错误 if ( error.code === "ECONNABORTED" || error.message === "Network Error" || error.message.includes("timeout") ) { toast("Network timeout", 5e3, true) return Promise.reject(error) } // 判断当前请求 config 是否进行同一处理异常 // false:不进行同一错误处理 if (Object.hasOwn(error.config, "catchHandler") && error.config.catchHandler === false) { return Promise.reject(error) } if (error.response) { // TODO 处理 API 响应的错误 const { status } = error.response if (status === 500) { toast("Server error", 5e3) } // ...... } return Promise.reject(error) } ) export default request ``` ### 使用: ```ts import request from "./request" rquest.get(`/v2/user`, { catchHandler: true }) ```
使用 PHPStorm 的高级元数据(PhpStorm advanced metadata) 作者: Chuwen 时间: 2023-02-11 分类: Laravel,PHP 评论 ## 例子 1 你通过 `$request->user()` 想拿到用户模型,但是没有类型提示很苦恼,你可以这样做 在项目跟路径创建一个文件 `.phpstorm.meta.php`,然后里面的内容写: ```php \App\Models\User::class, ])); } ``` 然后就会有类型提示了: ![](https://cdn.nowtime.cc/2023/02/10/1231715426.png) 更多高级用法请看:https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html#map