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

在Next.js中使用Express报错:原型读取失败及async_hooks模块缺失

解决Next.js集成Express时的模块缺失与类型错误问题

核心问题原因

你使用的Node.js 4.19.0版本过于陈旧,async_hooks是Node.js 8.x及以后版本才新增的核心模块,而Express 4.18.2依赖的on-finished、raw-body等包已经用到了这个模块,因此会出现找不到模块的错误,进而引发TypeError: Cannot read properties of undefined (reading 'prototype')这类连锁问题。


具体解决方案

  • 升级Node.js版本(最关键)
    卸载当前的Node.js 4.x版本,前往官网下载安装Node.js 16.x及以上的LTS版本(Next.js 13+推荐使用18.x或更高版本)。安装完成后,执行node -v和npm -v命令确认版本更新成功。

  • 清理并重新安装依赖
    删除项目目录下的node_modules文件夹和package-lock.json文件,然后重新执行npm install,确保所有依赖适配新的Node.js版本。

  • 解决npm全局安装权限问题
    运行npm install -g npm@latest提示权限不足时,Windows用户可右键以管理员身份打开终端再执行命令;也可以使用nvm(Node版本管理器)来管理版本,安装nvm后,通过nvm install <目标版本>安装指定Node版本,nvm use <版本号>切换使用,能有效避开权限问题。

  • 确认Next.js集成Express的正确方式
    在Next.js中使用Express需要创建单独的服务器文件(比如server.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('/custom', (req, res) => {
        return app.render(req, res, '/custom-page', req.query);
      });
    
      server.all('*', (req, res) => {
        return handle(req, res);
      });
    
      server.listen(3000, (err) => {
        if (err) throw err;
        console.log('> Ready on http://localhost:3000');
      });
    });
    

    同时修改package.json中的启动脚本:

    "scripts": {
      "dev": "node server.js",
      "build": "next build",
      "start": "NODE_ENV=production node server.js"
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:25:26