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

服务器从Heroku切换到Vercel后API请求404及JSON解析失败求助

解决Vercel部署后API接口404及JSON解析错误问题

问题根源

Vercel的Serverless架构和Heroku的容器部署逻辑完全不同:Heroku直接运行完整的Express服务器,自定义路由可直接生效;但Vercel默认仅识别api目录下的文件作为API接口,原Express代码未按Vercel规则配置,导致访问/book时返回的是Vercel的404 HTML页面,前端尝试解析JSON自然报错。

具体解决步骤

  1. 调整项目目录结构
    在项目根目录新建api文件夹,把API逻辑文件放在该目录下,比如创建api/book.js(对应访问路由/api/book)。

  2. 重构后端代码适配Vercel Serverless函数
    替换原Express路由代码为Vercel要求的函数格式,示例如下:

    import { MongoClient } from 'mongodb';
    
    export default async function handler(req, res) {
      // 只处理GET请求
      if (req.method !== 'GET') {
        return res.status(405).json({ message: '仅支持GET请求' });
      }
    
      try {
        // 连接MongoDB(需提前配置环境变量)
        const client = await MongoClient.connect(process.env.MONGODB_URI);
        const db = client.db('你的数据库名称');
        const bookCollections = db.collection('books');
    
        // 查询所有书籍数据
        const result = await bookCollections.find({}).toArray();
        res.status(200).json(result);
    
        client.close();
      } catch (error) {
        res.status(500).json({ message: '数据库查询失败', error: error.message });
      }
    }
    
  3. 修正前端请求地址
    把前端fetch的URL从https:xyz.vercel.app/book改成https://xyz.vercel.app/api/book,匹配Vercel的API路由前缀规则。

  4. 配置Vercel环境变量
    进入Vercel项目的「Settings」→「Environment Variables」,添加MongoDB连接字符串(比如MONGODB_URI),确保和Heroku上的配置完全一致。

  5. 重新部署验证
    提交代码重新部署Vercel项目,用Postman或浏览器访问https://xyz.vercel.app/api/book,确认返回JSON格式数据且状态码为200。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:15:37