Next.js初始化和一些配置

Next.js初始化和一些配置

  • Next.js初始化和一些配置
    • 初始化
    • 配置
      • 路径别名
      • 跨域问题
      • 图片跨域问题

Next.js初始化和一些配置

我的版本是@14.2.3

初始化

配置

路径别名

跨域问题

  1. 改为服务端组件
    把发起跨域请求的组件顶层的'use client'删掉
  2. 使用后端接口转发
    在Next.js自定义一个接口,前端改为调用此接口:
// 比如在api/request1.ts
export async function GET() {const res = await fetch('https://...')const data = await res.text()return Response.json({ data })
}// 在目标组件调用它:
const fetchArticleList = async () => {const response = await fetch("http://localhost:3000/api/erquest1");const data = await response.json()
}fetchArticleList()
  1. 使用rewrites配置项
    修改next.config.mjs,代码如下:
/** @type {import('next').NextConfig} */
const nextConfig = {async rewrites() {return [{source: '/api/request1',destination: 'https://...', // 真实地址}]}
};export default nextConfig;
  1. 使用headers配置项
    修改next.config.mjs,代码如下:
/** @type {import('next').NextConfig} */
const nextConfig = {async headers() {return [{source: "/api/:path*",headers: [{key: "Access-Control-Allow-Origin",value: "*",},{key: "Access-Control-Allow-Methods",value: "GET, POST, PUT, DELETE, OPTIONS",},{key: "Access-Control-Allow-Headers",value: "Content-Type, Authorization",},],},];}
};export default nextConfig;
  1. 使用中间件处理
    比如我们要发起请求:
import { NextResponse } from 'next/server'export async function GET() {const data = { success: true, data: { name: "yayu"}}return NextResponse.json(data)
}

在根目录新建middleware.js:

import { NextResponse } from 'next/server'const allowedOrigins = ['https://...'] // 真实地址const corsOptions = {'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS','Access-Control-Allow-Headers': 'Content-Type, Authorization',
}export function middleware(request) {// 检查请求的 origin 属性const origin = request.headers.get('origin') ?? ''const isAllowedOrigin = allowedOrigins.includes(origin)// 处理预检 OPTIONS 请求const isPreflight = request.method === 'OPTIONS'if (isPreflight) {const preflightHeaders = {...(isAllowedOrigin && { 'Access-Control-Allow-Origin': origin }),...corsOptions,}return NextResponse.json({}, { headers: preflightHeaders })}// 处理普通请求const response = NextResponse.next()if (isAllowedOrigin) {response.headers.set('Access-Control-Allow-Origin', origin)}Object.entries(corsOptions).forEach(([key, value]) => {response.headers.set(key, value)})return response
}export const config = {matcher: '/api/:path*',
}
  1. 其他处理方式
    如果上面的办法还是有跨域问题,可能是当你发送请求(如post)时,会先发送一个预检请求,而你的后端部分没有处理这段逻辑可能活导致报错,如下面的请求处理:
// 处理请求函数
const handlerRequest = async (req: Request): Promise<Response> => {const data = (await req.json()) as Datareturn NextResponse.json(code: 200,msg: 'success')
}

如果是前端发送预检请求,走到handlerRequest函数,由于OPTIONS请求没有Body,代码运行到await req.json()时,就会报错。于是浏览器认为OPTIONS请求没有返回status 200,因此强行认为你的接口不支持跨域。

图片跨域问题

如果你使用其他域名的图片时会报错:

<Image width={100} height={100} src="https://image.baidu.com/search/..." alt="baiduImage" className={styles.img} />

报错里面有个链接,有解释报错原因,解决办法:

12.3.0之后的版本:

module.exports = {images: {remotePatterns: [{protocol: 'https',hostname: 'image.baidu.com',port: '',pathname: '/search/**',},],},
}

12.3.0之前的版本:

module.exports = {images: {domains: ['image.baidu.com'],},
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据总线、位扩展、字长

数据总线&#xff08;Data Bus&#xff09; 定义 数据总线是计算机系统中的一组并行信号线&#xff0c;用于在计算机内部传输数据。这些数据可以在中央处理器&#xff08;CPU&#xff09;、内存和输入/输出设备之间传输。 作用 数据传输&#xff1a;数据总线负责在计算机各…

c++【入门】求圆环的面积

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 如下图所示的圆环铁片&#xff0c;中间是空心的&#xff0c;已知圆环外圆的半径是r1厘米&#xff08;如&#xff1a;10cm&#xff09;&#xff0c;内圆半径是r2厘米&#xff08;如&#xff1a;6cm&#xff09;&#xff0c;请编…

心链13---主页切换功能 + loading特效 + 导航栏完善 + 队伍页接口修改

心链 — 伙伴匹配系统 直接取出所有用户&#xff0c;依次和当前用户计算分数&#xff0c;取 TOP N&#xff08;54 秒&#xff09; 优化方法&#xff1a; 切忌不要在数据量大的时候循环输出日志&#xff08;取消掉日志后 20 秒&#xff09;Map 存了所有的分数信息&#xff0c;占…

C++ | Leetcode C++题解之第140题单词拆分II

题目&#xff1a; 题解&#xff1a; class Solution { private:unordered_map<int, vector<string>> ans;unordered_set<string> wordSet;public:vector<string> wordBreak(string s, vector<string>& wordDict) {wordSet unordered_set(w…

SpringBoot+Vue网上购物商城系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 用户商家管理员 系统功能截图

docker部署redis实践

1.拉取redis镜像 # 拉取镜像 sudo docker pull redis2.创建映射持久化目录 # 创建目录 sudo mkdir -p $PWD/redis/{conf,data}3. 运行redis 容器&#xff0c;查看当前redis 版本号 # 运行 sudo docker run --name redis -d -p 6379:6379 redis # 查看版本号 sudo docker ex…

java异常处理知识点总结

一.前提知识 首先当运行出错的时候&#xff0c;有两种情况&#xff0c;一种叫做“错误”&#xff0c;另一种叫做“异常”。错误指的是运行过程中遇到了硬件或操作系统出错&#xff0c;这种情况程序员是没办法处理的&#xff0c;因为这是硬件和系统的问题&#xff0c;不能靠代码…

React Native中集成ArcGIS以显示地图、渲染自定义图层和获取地理信息数据

在您的数据采集上传的应用中集成ArcGIS以显示地图、渲染自定义图层和获取地理信息数据是一项常见需求。下面是如何实现这些功能的详细指南&#xff0c;包括具体步骤和示例代码。 1. 显示地图 原生开发 Android&#xff1a; 使用ArcGIS Android SDK。您需要在AndroidManifest…

tile-join的详细解释和使用说明

tile-join是Tippecanoe工具集中的一个实用命令&#xff0c;主要用于合并多个MBTiles文件&#xff0c;或者将属性数据添加到已有的MBTiles文件中。它可以处理大量的GeoJSON、Shapefile和MBTiles数据&#xff0c;并将它们合并成一个新的MBTiles文件。这对于需要结合多个数据源或者…

使用GPT-soVITS再4060下2小时训练声音模型以及处理断句带来的声音模糊问题

B站UP主视频 感谢UP主“白菜工厂1145号员工”的“熟肉”&#xff0c;我这篇笔记就不展示整一个训练和推理流程&#xff0c;重点写的4060该注意的一些事项。如何解决断句模糊的问题&#xff0c;在本篇笔记的最末尾。 相关连接&#xff1a; 原项目github UP主的说明文档 1、训…

如果一个列表有100000个数据,这个该怎么进行展示?

当列表包含大量数据&#xff08;如100,000个数据项&#xff09;时&#xff0c;直接渲染所有数据到DOM可能会导致性能问题&#xff0c;因为浏览器需要处理大量的DOM节点。为了优化这种情况&#xff0c;有几种常见的策略可以使用&#xff1a; 分页&#xff08;Pagination&#xf…

Python中的异常处理:try-except-finally详解与自定义异常类

Python中的异常处理&#xff1a;try-except-finally详解与自定义异常类 在Python编程中&#xff0c;异常处理是确保程序健壮性和可靠性的重要部分。当程序遇到无法预料的错误时&#xff0c;异常处理机制能够防止程序崩溃&#xff0c;并允许我们采取适当的措施来解决问题。本文…

Linux的目录结构介绍和环境变量的设置

目录 前言一、系统环境二、Linux的目录结构2.1 Linux目录结构介绍2.2 Linux文件的路径描述2.2.1 绝对路径2.2.2 相对路径2.2.3 特殊的路径符 三、Linux的环境变量设置3.1 环境变量PATH3.2 关于$符的使用3.3 环境变量的设置 总结 前言 本篇文章介绍Linux的目录结构和环境变量的…

相同的树-力扣

这道题目与堆成二叉树题目很相似&#xff0c;对称二叉树是每次传入的节点组合是 《左子树的左节点 和 右子树的 右节点》 《左子树的右节点 和 右子树的左节点》&#xff0c; 而这道题就更加简单&#xff0c;传入两棵树的左节点和右节点即可。 /*** Definition for a binary t…

[React]useEffect中return函数执行时机

已知在组件卸载时会执行return函数&#xff0c;其实在依赖项变更时也会执行。 import { useEffect, useState } from react;export default function HomePage() {const [count, setCount] useState(0);useEffect(() > {console.log(effect, count);return () > {conso…

【云原生Kubernetes项目部署】k8s集群+高可用负载均衡层+防火墙

目录 环境准备 拓朴图 项目需求 一、Kubernetes 区域可采用 Kubeadm 方式进行安装 1.1所有节点master、node01、node02 1.2所有节点安装docker 1.3所有节点安装kubeadm&#xff0c;kubelet和kubectl 1.4部署K8S集群 1.4.1复制镜像和脚本到 node 节点&#xff0c;并在 …

Excel数据自动检测,语音报警VBA代码,语音提醒

要实现这个功能&#xff0c;你可以使用以下VBA代码&#xff1a; 1. 首先&#xff0c;在Excel中插入一个ActiveX控件&#xff08;如"Microsoft Sound Control 6.0 (Spinner.Sound)"&#xff09;&#xff0c;并将其命名为"SoundControl"。 2. 然后&#xff0…

html--酷炫背景引导主页

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>ZZVIPS酷炫背景引导主页</title><meta name"viewport" content"widthdevice-width,initial-scale1,maximum-scale1,user-scala…

Python 模块完全指南:从基础语法到高级应用的全方位解析

基本语法 在 Python 中&#xff0c;模块是一种包含 Python 代码的文件&#xff0c;用于组织和重用代码。模块可以包含变量、函数、类等&#xff0c;并且可以被其他 Python 程序导入和使用。 1. 导入模块 要使用一个模块&#xff0c;需要使用 import 关键字将其导入到当前的 …

jquery.datetimepicker控件不弹出的问题

项目场景&#xff1a; CRM项目&#xff0c;在项目中涉及日期类输入框&#xff0c;打算采用平常见到的点击选择日期的方式。在浏览了网页后&#xff0c;目前比较好的解决方案是jquery.datetimepicker和flatpicker两种&#xff0c;flatpicker的缺点是官网是英文版的&#xff0c;…