nextjs使用02

并行路由

同一个页面,放多个路由,,
在这里插入图片描述
目录前面加@,layout中可以当作插槽引入

import React from "react";

function layout({children,notifications,user}:{
    children:React.ReactNode,
    notifications:React.ReactNode,
    user:React.ReactNode
}){

    return (
        <div>layout
            {notifications}
            <div>{user}</div>
        </div>
    )
}

export default layout

nextjs拦截跳转页面

在这里插入图片描述

next写接口

创建route.ts,

export async function POST(request:Request){
    var comment = await request.json();

    const newComment = {
        id:comments.length+1,
        text:comment.text
    }

    comments.push(newComment)

    return new Response(JSON.stringify(newComment),{
        headers:{"Content-Type":"application/json"},
        status:201
    })
}
next接收queryParams
import {type NextRequest} from "next/server"
export async function GET(request:NextRequest,){
    var searchParams = request.nextUrl.searchParams;
    var query = searchParams.get("query");
    var find = query?comments.find(comment=>comment.text.includes(query)):comments;
    return Response.json(find)
}
获取请求头
  • 第一种
import {type NextRequest} from "next/server"
export async function GET(request:NextRequest,){

     var requestHeaders = new Headers(request.headers);
     console.log(requestHeaders.get("Authorization"))
    }
  • 第二种
import {type NextRequest} from "next/server"
import {headers} from "next/headers"
export async function GET(request:NextRequest,){
    const headersList =  await headers()
    console.log(headersList.get("Authorization"))

    return Response.json("xxx")
}
获取cookie

两种方式获取cookie在这里插入图片描述

在这里插入图片描述

middleware中间件拦截

middleware.ts跟app一个层级

import  type {NextRequest} from "next/server";
import {NextResponse} from "next/server"

export function middleware(request:NextRequest){
    console.log(request.nextUrl.pathname,"pathname")

    // 重定向: 地址会变 
    // return NextResponse.redirect(new URL("/",request.url))
    //  转发,, 浏览器url不变,内容变化
    return NextResponse.rewrite(new URL("/",request.url))
}


export const config = {
    // 将 /hello 转发到  / 
    matcher:"/hello"
}

中间件处理response:===> 设置cookie或者响应头

import  type {NextRequest} from "next/server";
import {NextResponse} from "next/server"

export function middleware(request:NextRequest){
    console.log(request.nextUrl.pathname,"pathname")
    var response = NextResponse.next();
    var themePreference = request.cookies.get("theme");
    if (!themePreference){
        response.cookies.set("theme","dark")
    }
    
    return response
}


export const config = {
    // 将 /hello 转发到  /
    matcher:"/hello"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值