首页 > 解决方案 > 是什么导致 express.js 请求中的可读字段设置为 false?

问题描述

expressjs 新手并尝试调试我在本地遇到的以下问题:

  1. GET /health 端点检查适用于 200 状态响应
  2. POST / login 端点在本地运行时甚至不会触发(我在相应的控制器函数中添加了一个“console.log”语句,它将由 express.js 路由器调用并且它永远不会被触发) - 我注意到当我console.log(req)在主错误处理程序中执行此操作时,该readable字段被标记false,而在 /health 端点中,它被标记为 true:
    req: IncomingMessage {
        _readableState: ReadableState {
          objectMode: false,
          highWaterMark: 16384,
          buffer: BufferList { head: null, tail: null, length: 0 },
          length: 0,
          pipes: null,
          pipesCount: 0,
          flowing: true,
          ended: true,
          endEmitted: true,
          reading: false,
          sync: false,
          needReadable: false,
          emittedReadable: false,
          readableListening: false,
          resumeScheduled: false,
          emitClose: true,
          autoDestroy: false,
          destroyed: false,
          defaultEncoding: 'utf8',
          awaitDrainWriters: null,
          multiAwaitDrain: false,
          readingMore: false,
          decoder: null,
          encoding: null,
          [Symbol(kPaused)]: false
        },
        readable: false,

这只是在过去一天左右才开始发生,所以当服务器在本地运行时,可能进行了哪些更改会影响 POST /login 端点的触发能力,这真是令人困惑。

标签: javascriptexpress

解决方案


一个明确的请求是IncomingMessage一个可读的流并继承它的.readable属性

是否true可以安全调用readable.read(),这意味着流尚未被销毁或发出“错误”或“结束”。

简而言之,这意味着流尚未完全消耗。由于 GET 请求的主体被忽略(它没有),与 POST 请求相比,您的中间件都不会读取它。所以这是意料之中的,对您的实际问题没有帮助。


推荐阅读