首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KoaJs无法处理CloudFunctions上的POST请求

KoaJs无法处理CloudFunctions上的POST请求
EN

Stack Overflow用户
提问于 2022-02-27 10:28:48
回答 1查看 475关注 0票数 1

我有一个用NodeJS编写的KoaJS应用程序,

app.ts

代码语言:javascript
运行
复制
const app = new Koa();

app.use(healthCheck());
app.use(bodyParser());
app.use(errorHandler());
app.use(endpoints);

export default app;

main.ts

代码语言:javascript
运行
复制
const port = process.env.PORT || 3000;

if (!isCloudFunctions()) {
    app
        .listen(port, () => {
            console.info(`Listening at http://localhost:${port}`);
        })
        .on('error', console.error);
}

export const api = (req, res) => {
    app.callback()(req, res);
}

该应用程序在Cloud Runs上运行良好,我可以在Cloud Functions上部署应用程序,但在Functions上,应用程序只能处理GET请求。如果我尝试一个POST请求,我会得到这个错误。

代码语言:javascript
运行
复制
InternalServerError: stream is not readable
at getRawBody (/workspace/node_modules/raw-body/index.js:112:10)
at readStream (/workspace/node_modules/raw-body/index.js:178:17)
at AsyncFunction.module.exports [as json] (/workspace/node_modules/co-body/lib/json.js:39:21)
at executor (/workspace/node_modules/raw-body/index.js:113:5)
at parseBody (/workspace/node_modules/koa-bodyparser/index.js:100:26)
at new Promise (<anonymous>)
at bodyParser (/workspace/node_modules/koa-bodyparser/index.js:85:25)
at next (/workspace/node_modules/koa-compose/index.js:42:32)
at /workspace/webpack:/sample-explore/apps/sample-api/src/middlewares/health-check.ts:10:12
at Generator.next (<anonymous>)

我在ExpressJS中重新创建了应用程序,它在运行和函数中都很好地工作。

然而,我真的很喜欢本地的async/awaitcompose routing of KoaJS

有人知道为什么KoaJS不能处理云函数上的POST请求吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-02 11:54:32

json主体在google (文档)中被自动解析,而koa-bodyparser中间件无法处理已经解析的主体。

有关此问题的更多信息:https://github.com/koajs/bodyparser/issues/127

从问题线程中建议的修补程序是使用ctx.req.body而不是ctx.request.body,您当然需要在本地运行时解析它。或者添加一个中间件,该中间件将支持已经解析的主体。

代码语言:javascript
运行
复制
function hybridBodyParser (opts) {
  const bp = bodyParser(opts)
  return async (ctx, next) => {
    ctx.request.body = ctx.request.body || ctx.req.body
    return bp(ctx, next)
  }
}

app.use(hybridBodyParser())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71283981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档