Switch language
zh
Switch theme
Light
  • middleware-gin-contrib-cors-在-301-时失效

    背景: gin 配置了路由 router.GET("/api/users") , 添加了 cors 中间件, 但是访问 /api/users/ 时, 会返回 301 + cros 错误 原因: gin 默认打开 “RedirectTrailingSlash”, 表示自动添加(或删除) “/” 并作 301 跳转, 这时候还未进入 middleware, 所以 cors 中间件所添加的 header 不会出现在返回头中. 中间件其它现象: c.Header("before-next": "can-be-show") // 会写入到返回头 c.next() c.Header("after-next": "won't be returned") // 不会出现在返回头中 解决办法: 在 gin 路由中同时添加 带 / 和不带 / 的路由, 工作量大, 且 ugly ❌ 使用 nginx 在 go-web 程序外部直接全部带上 cors 头 ✅
  • laravel5-5+-Package-Auto-Discovery-包自动发现

    转载自原文 一切的起源都是来自 composer.json ,在使用 composer 的时候,你可以在 post-autoload-dump 部分指定你想执行的脚本,比如在 Laravel 5.5 的时候,我们可以看到这样的定义: "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], ... } 对于 postAutoloadDump 是很熟悉了,Laravel 之前的版本基本都有,它的工作是清理一些缓存,删除一些旧的文件。 我们的关注重点是 @php artisan package:discover ,也就是会执行 @php artisan package:discover 这个命令。 这个命令是干嘛的呢?它其实是位于Illuminate\Foundation\Console\PackageDiscoverCommand 中,主要是通过执行Illuminate\Foundation\PackageManifest 的 build() 方法来达到 发现 package 的目的。 而 PackageManifest 早就注册在 Laravel 的 Container 中,那么它可以保证每次在启动 Laravel 的时候都能使用 PackageManifest 的 build() 方法,这个 build() 方法主要的逻辑就是: 找寻 vendor/composer/installed.json 这个文件,这个文件是 composer 自己生成的,记录着每一次的 composer autoload 的 class map。 而此时,Laravel 又将这些内容映射到 extra.
  • laravel-定时任务不执行了--

    linux 服务端使用 pm2 开启 php artisan queue:work 守护进程, 突然 队列不工作了. 原因可能是 代码更新后, 没有重启 任务, 所以 pm2 reload 0 即可
  • laravel-migration-`Integrity-constraint-violation-`

    原因不是 约束的 key 重复了, 而是数据库中已存在数据, 且该字段重复了
  • laravel-factory()--make()---create()-的区别

    相同点: 都是生成模型的实例 不同点: create() 同时执行了 save()方法, 保存到了数据库中; make() 只生成了模型实例
  • laravel-dispatch()-异步任务耗时长--

    在控制器中使用 This->dispatch(new Job()) 后, 接口依然耗时长. 原因是 job 类中 __contruct() 方法里操作过多(请求api等), 这一步是同步进行的. 真正 异步 执行的是 Job 类中的 handle() 方法
  • json-Unmarshal-如何获取-null

    对于如下 json 和 struct, 会将 gender 解析为 false, 而实际上应为 nil, 则需要 将 struct 中的 bool 类型转为 *bool 类型 { "name": "Jim Green", "age": 15, "gender": null } type Student struct { Name string `json:"name"` Age int `json:"age"` Name bool `json:"gender"` } 因为在 go 中指针不可以进行运算, 只能引用 对于 *bool 类型的变量, 不能直接赋值 如 var gender *bool *gender = true // panic: runtime error: invalid memory address or nil pointer dereference 而应该对非指针类型赋值, 再引用指针 var gender *bool tempGender := true gender = &tempGender
  • js-的遍历

  • guzzle-http-post-(json)

    $client = new \GuzzleHttp\Client(); $response = $client->post('http://xxx.com/api/login', [ 'json' => [ 'phone' => "152xxxx1234", 'password' => "123456", ] ]); $response = $client->post('http://xxx.com/api/login', [ 'form_params' => [ 'phone' => "152xxxx1234", 'password' => 123456, ] ]); 若使用 json, 则 数组中的值(不论是否数字), 都要用 引号 起来, 而 form_params 则不需要 reference
  • go-通用-http-client-请求头

    参考stackoverflow: adding-a-default-http-header-in-go package main import ( "fmt" "net/http" "time" ) const accessToken = "MY_DEMO_TOKEN" type MyRoundTripper struct { r http.RoundTripper } func (mrt MyRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) { r.Header.Add("Authorization", "Bearer: "+accessToken) return mrt.r.RoundTrip(r) } func main() { client := &http.Client{ Timeout: time.Second * 10, Transport: MyRoundTripper{r: http.DefaultTransport}, } fmt.Println(client.Get("http://google.com/")) }
🍀