You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nextron(Next.js+Electron)生产构建中HTTP请求异常求助

问题:Nextron构建生产版后网络请求协议变为app://而非https://
  • 基于已有Next.js项目用Nextron创建Electron应用,开发环境一切正常,但生产构建完成后,所有API请求(包括next-auth自动发起的认证请求、自定义axios请求)的协议都被替换为app://,直接导致依赖API调用和next-auth认证的业务完全无法运行。
  • 使用的模板为saltyshiomix/nextron仓库中的with-material-ui示例。
  • 已全网检索解决方案但未找到有效办法。

解决方案

1. 给请求工具强制指定完整HTTPS地址

针对axios请求

不要使用相对路径发起请求,创建axios实例时直接配置baseURL为你的API服务完整HTTPS地址:

import axios from 'axios';

const apiClient = axios.create({
  baseURL: 'https://你的API域名.com/api',
  // 其他自定义配置(超时、请求头等)
});

后续所有请求都通过这个实例发起,避免协议被自动替换。

针对next-auth认证

在生产环境的环境变量文件(.env.production)中明确设置NEXTAUTH_URL为认证服务的完整HTTPS地址:

NEXTAUTH_URL=https://你的API域名.com/api/auth

同时在next-auth的配置文件(pages/api/auth/[...nextauth].ts)中,确保所有provider的回调URL都使用完整HTTPS路径,不要用相对路径。

2. 配置Next.js生产环境资源前缀(可选,若静态资源也受影响)

如果你的静态资源部署在外部服务器/CDN,在next.config.js中添加生产环境的assetPrefix配置,强制静态资源使用HTTPS协议加载:

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  assetPrefix: process.env.NODE_ENV === 'production' ? 'https://你的静态资源域名.com' : '',
};

module.exports = nextConfig;

3. Electron请求拦截兜底方案

如果上述方法仍未解决问题,可以在Electron的主进程中拦截所有请求,替换错误的app://协议:
在main/background.ts(或background.js)中添加请求拦截逻辑:

import { app, BrowserWindow, session } from 'electron';
import path from 'path';

app.whenReady().then(() => {
  // 拦截并修正API请求协议
  session.defaultSession.webRequest.onBeforeRequest((details, callback) => {
    // 匹配所有app://开头的API请求
    if (details.url.startsWith('app://') && details.url.includes('/api/')) {
      const correctedUrl = details.url.replace('app://', 'https://你的API域名.com');
      callback({ redirectURL: correctedUrl });
    } else {
      callback({});
    }
  });

  // 创建主窗口
  const mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.js'),
    },
  });

  // 加载应用(保持原有逻辑)
  if (process.env.NODE_ENV === 'development') {
    mainWindow.loadURL('http://localhost:3000');
  } else {
    mainWindow.loadFile(path.join(__dirname, '../renderer/out/index.html'));
  }
});

内容的提问来源于stack exchange,提问作者aitsamahad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:37:58