我正在尝试使用nextjs中间件函数,这里我创建中间件文件并添加以下代码
import type { NextRequest } from 'next/server'
import { NextResponse } from 'next/server'
export function middleware(req: NextRequest) {
const { nextUrl: url, geo } = req
const country = geo?.country || 'US'
url.searchParams.set('country', country)
return NextResponse.rewrite(url)
}
export const config = {
matcher: '/'
}
在索引页中-
export default function Home(props: any) {
console.log(props)
return (
<h1 className={styles.title}>
Welcome to {props.country}
</h1>
)
}
export const getServerSideProps = ({ query }: any) => ({
props: query,
})
这里我显示国家名称从props.country
到h1
标签。它工作得很完美。
但是在geo
对象中,中间件提供了-
城市、地区、纬度、经度、国家/地区
在中间件函数中,我想发送完整的geo
对象,并从页面组件接收,以显示所有这些地理信息。我该怎么做呢?
我正设法由这发
import type { NextRequest } from 'next/server'
import { NextResponse } from 'next/server'
export function middleware(req: NextRequest) {
const { nextUrl: url, geo } = req
//Here I am try to sent full geo object, not only country as string
//Please tell me any way to sent object from here to page component.
url.searchParams.set('country', geo)
return NextResponse.rewrite(url)
}
export const config = {
matcher: '/'
}
从页面组件中,我想接收所有字段,如city
、region
、latitude
、longitude
和country
。请帮助我,我希望我能澄清我的问题。
1条答案
按热度按时间ubbxdtey1#
将一个对象作为值传递给
url.searchParams.set
将不起作用,因为该值将在进程中序列化。相反,你可以使用
JSON.stringify
将对象转换为字符串,如下所示:然后在组件中,使用
JSON.parse
将其再次转换为对象: