这个报错:

json: Unmarshal(non-pointer model.Submit)

出现在语句:

err := c.ShouldBind(codedata)

说明在调用 ShouldBind 时传入了一个 非指针类型 的参数,而它需要一个指针类型来把 JSON 数据反序列化进去。


问题详解:

在 Go 的 encoding/json 包(Gin 的绑定底层也是用它)中,json.Unmarshal 必须接收一个指针,否则无法修改原变量的值。

例如:

type Submit struct {
    Code string `json:"code"`
}

错误写法(非指针):

var codedata model.Submit // 这是值类型
err := c.ShouldBind(codedata) // 这里会报错:json: Unmarshal(non-pointer model.Submit)

正确写法(指针):

var codedata model.Submit
err := c.ShouldBind(&codedata) // 正确,传指针

正确写法总结:

var codedata model.Submit
err := c.ShouldBind(&codedata)
if err != nil {
    c.JSON(400, gin.H{"error": err.Error()})
    return
}

我感觉我已经开始摆了。
比如说现在,我暂时没有心力去学习一些新的东西。
这种状况已经持续很久了。
可能对于我来说,又到了一个下降的情况。
可能未来的一段时间我都不会有什么产出。
也不会获得什么成就。
我打算让自己的大脑静一静。
今天确实没有动力。
希望明天会更好。
希望生活对我好点。

很久不进行写作的我,渐渐失去了写作的能力。
我会回忆起高一的时候,我们语文老师让我们写周记。
我的分享欲或许就是在那个时候培养起来的。后来到了博客。
总是会在有节日的时候送上祝福,好像真的有人在关注一样。
悲观的情感总是促使写作的原因。
或许也是促使分享的原因。
我认为我在上了大学之后生活逐渐的变好了。
或许是因为有了更需要关注的事情,让我渐渐的不再有分享的心。
又或者是因为和周围人能够交流的机会变得很少了。
就算是上课,大家也基本上不会有互动。
少数的时候不得已必须要交流的时候,也会交流一二,等下了课之后就又散了。
因为这种不固定的地缘关系。
让被迫进行的交流变得少了,我可以把更多的精力放在其他的地方。
不管是什么地方,总归不再是人际交往方面。
事实上这也是我高中时候就一直在期待的。

如果希望在 Next.js 的服务端组件(Server Component)中获取当前请求的路径(pathname),但又不想使用 API 路由或客户端组件(Client Component),可以通过使用 Middleware 来实现。

使用 Middleware 获取当前路径

可以在 Next.js 的 Middleware 中拦截请求,并将当前路径添加到请求头中,然后在服务端组件中读取该请求头,从而获取当前路径。

1. 创建 Middleware

在项目的根目录下创建一个 middleware.ts 文件:

// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  const requestHeaders = new Headers(request.headers);
  requestHeaders.set('x-current-path', request.nextUrl.pathname);

  return NextResponse.next({
    request: {
      headers: requestHeaders,
    },
  });
}

export const config = {
  matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
};

上述 Middleware 会将当前请求的路径添加到请求头中的 x-current-path 字段。(Medium)

2. 在服务端组件中读取路径

在服务端组件中,可以使用 headers() 方法读取请求头,从而获取当前路径:(propelauth.com)

import { headers } from 'next/headers';
export default async function Getsuffix(layer : number):Promise<string>{
  const headerList = await headers();
  const pathname = headerList.get('x-current-path') || '/';
  // 解析路径后缀
  const segments = pathname.split('/');
  const titleSuffix = segments[layer] || '';
  return (
    titleSuffix
  );
}