cari

Rumah  >  Soal Jawab  >  teks badan

Cara menggunakan penghalaan API dalam NextJS 13

Apabila menggunakan Express, saya pernah menyimpan pengguna seperti request.user:

import jwt from "jsonwebtoken"; 
import asyncHandler from "express-async-handler"; 
import User from "../models/userModel.js";

const protect = asyncHandler(async (req, res, next) => {
  let token;
  token = req.cookies.jwt;
  if (token) {
    try {
      const decoded = jwt.verify(token, process.env.JWT_SECRET);
      req.user = await User.findById(decoded.userId).select("-password");
      next();
    } catch (error) {
      res.status(401);
      throw new Error("Not authorized , invalid token");
    }
  } else {
    res.status(401);
    throw new Error("Not authorized , no token");
  }
});

export { protect };

And I was able to get the current user like this : 

const createPost = asyncHandler(async (req, res) => {
  const { content, image } = req.body;
  const user = req.user;

Tetapi bagaimana untuk melakukan ini menggunakan penghalaan API NextJS 13 dan perisian tengah serta cara menggunakan kuki. Baru kepada NextJS jadi sebarang bantuan amat dihargai.

P粉903969231P粉903969231434 hari yang lalu642

membalas semua(1)saya akan balas

  • P粉176980522

    P粉1769805222023-09-08 00:18:14

    Dalam Next.js, anda boleh menggunakan sambungan kuki pada NextRequest dan NextResponse untuk membaca dan memanipulasi kuki. Kaedah khusus adalah seperti berikut:

    Pertama, anda perlu mengimport kuki dari seterusnya/pengepala:

    import { cookies } from 'next/headers'

    Kemudian, anda boleh mendapatkan biskut seperti ini:

    const cookieStore = cookies()
    const token = cookieStore.get('token')

    Untuk menetapkan kuki, anda perlu mengembalikan respons baharu menggunakan pengepala Set-Cookie:

    return new Response('Hello, Next.js!', {
      status: 200,
      headers: { 'Set-Cookie': `token=${token}` },
    })

    Anda juga boleh menggunakan objek NextRequest untuk membaca kuki:

    export async function GET(request) {
      const token = request.cookies.get('token')
    }

    Untuk permintaan masuk, kuki mempunyai kaedah berikut: dapatkan, dapatkanSemua, tetapkan dan padam kuki. Anda boleh gunakan perlu menyemak sama ada kuki wujud, atau kosongkan untuk memadam semua kuki.

    Untuk respons keluar, kuki mempunyai kaedah berikut dapatkan, dapatkanSemua, tetapkan dan padam.

    Berikut adalah contoh cara menggunakan kaedah ini:

    import { NextResponse } from 'next/server'
    import type { NextRequest } from 'next/server'
    
    export function middleware(request: NextRequest) {
      let cookie = request.cookies.get('nextjs')
      console.log(cookie) // => { name: 'nextjs', value: 'fast', Path: '/' }
      const allCookies = request.cookies.getAll()
      console.log(allCookies) // => [{ name: 'nextjs', value: 'fast' }]
    
      request.cookies.has('nextjs') // => true
      request.cookies.delete('nextjs')
      request.cookies.has('nextjs') // => false
    
      const response = NextResponse.next()
      response.cookies.set('vercel', 'fast')
      response.cookies.set({
        name: 'vercel',
        value: 'fast',
        path: '/',
      })
      cookie = response.cookies.get('vercel')
      console.log(cookie) // => { name: 'vercel', value: 'fast', Path: '/' }
    
      return response
    }

    balas
    0
  • Batalbalas