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

Vercel部署Node.js Express接口Post方法失效,报stream不可读错误

Node.js API 在 Vercel Dev 环境下出现 "stream is not readable" 错误

运行vercel dev启动服务后,提交请求时抛出以下错误:

$ vercel dev
Vercel CLI 34.2.7
> Ready! Available at http://localhost:3000
InternalServerError: stream is not readable
    at readStream (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\raw-body\index.js:178:17)
    at getRawBody (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\raw-body\index.js:109:12)
    at read (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\body-parser\lib\read.js:79:3)
    at jsonParser (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\body-parser\lib\types\json.js:135:5)
    at Layer.handle [as handle_request] (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:328:13)
    at C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:286:9)
    at Function.process_params (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:346:12)
    at next (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:280:10)
    at expressInit (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\middleware\init.js:40:5)
    at Layer.handle [as handle_request] (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:328:13)
    at C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:286:9)
    at Function.process_params (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:346:12)
    at next (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\router\index.js:280:10)
    at query (C:\Users\mypc\MyDrive\workspace\visualstudio\sample-vercel\node_modules\express\lib\middleware\query.js:45:5)

当前项目代码:

index.js

const express = require('express');
const cron = require("node-cron");
const path = require('path');
const bodyParser = require('body-parser');
const PropertiesReader = require('properties-reader');

var environment = require(path.join(__dirname, '..', 'components', 'env', 'environment'));
var properties = new PropertiesReader(environment);
var routes = require('../components/controllers/routes');
var app = express();

app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.use('/public', express.static(path.join(__dirname, '../components/static')));
app.use('/sw.js', express.static(path.join(__dirname, '../components/static/sw.js')));

routes(app);
const PORT = process.env.PORT || properties.get('main.app.port');
if (require.main === module) {
    app.listen(PORT, () => console.log('Server ready on port '+PORT));
}

module.exports = app;

routes.js

module.exports = function (app) {
    app.use(session({
        secret: 'secretsession',
        resave: true,
        saveUninitialized: true
    }));

    // set the view engine to ejss
    app.set('view engine', 'ejs');

    app.get('/', function (req, res) {
        res.sendFile(path.join(__dirname + '/../static/index.html'));
    });
    
    app.post('/send', function (req, res) {
        console.log("Request Received");
    });
}

观察到请求并未到达/send路由的POST处理函数,浏览器和Postman提交请求均触发相同错误。


解决方案

1. 替换body-parser为Express内置解析器

Express 4.16.0及以上版本已集成body-parser核心功能,无需单独安装使用body-parser模块,旧版本的body-parser可能与Vercel Dev环境的请求流处理逻辑不兼容。修改index.js中的解析器配置:

// 移除 const bodyParser = require('body-parser');
// 替换原bodyParser相关代码为:
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

2. 修复routes.js中的依赖缺失

routes.js中使用了session和path模块但未引入,会导致运行时错误,需补充依赖:

// 在routes.js顶部添加
const session = require('express-session');
const path = require('path');

同时确保已安装express-session:

npm install express-session

3. 添加Vercel配置文件

在项目根目录创建vercel.json,指定Node.js运行环境和路由规则,确保Vercel能正确识别Express应用:

{
  "version": 2,
  "builds": [
    {
      "src": "./index.js",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/index.js"
    }
  ]
}

4. 重启Vercel Dev服务

修改完成后,停止当前vercel dev进程,重新启动服务测试请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:48:14