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

Next.js自定义服务器修改后执行yarn dev无变更,路由未触发求助

Next.js自定义服务器不生效的解决方案

核心问题1:dev脚本没运行自定义服务器

你当前的dev脚本用的是next dev,这是启动Next.js默认内置服务器的命令,完全没用到你写的Express自定义服务器文件。

修改package.json里的dev脚本,改成直接运行你的自定义服务器文件(假设你的自定义服务器文件叫server.js):

"dev": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node server.js"

核心问题2:路由顺序错误

Express路由是按定义顺序匹配的,你把*(匹配所有请求)放在最前面,后面的/和/getFile永远不会被触发——请求会先被*路由拦截。要把通配路由移到最后。

核心问题3:缺少端口监听与Next.js默认请求处理

你的代码里没有让服务器监听端口,也没在通配路由里调用Next.js的请求处理逻辑,导致请求无法正常响应,日志也出不来。

修改后的完整自定义服务器代码示例:

const express = require('express');
const next = require('next');

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  // 先定义具体路由
  server.get(`/`, (req, res) => {
    console.log("Test empty");
    // 可在这里处理自定义逻辑,或交给Next.js渲染页面
    return handle(req, res);
  });

  server.get(`/getFile`, (req, res) => {
    console.log("Test file url empty");
    // 自定义逻辑示例:返回内容
    res.send('File content');
  });

  // 最后定义通配路由,处理所有其他请求
  server.get(`*`, (req, res) => {
    console.log("Test");
    return handle(req, res); // 交给Next.js处理默认路由
  });

  // 监听端口
  server.listen(3000, (err) => {
    if (err) throw err;
    console.log('> Ready on http://localhost:3000');
  });
});

验证步骤

  1. 保存修改后的自定义服务器文件和package.json
  2. 停止当前运行的yarn dev,重新执行yarn dev
  3. 访问http://localhost:3000,终端会输出Test empty
  4. 访问http://localhost:3000/getFile,终端会输出Test file url empty
  5. 访问其他任意路径,终端会输出Test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:10:16