javascript - 是什么导致 express.js 请求中的可读字段设置为 false?
问题描述
expressjs 新手并尝试调试我在本地遇到的以下问题:
- GET /health 端点检查适用于 200 状态响应
- 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 端点的触发能力,这真是令人困惑。
解决方案
一个明确的请求是IncomingMessage
一个可读的流并继承它的.readable
属性:
是否
true
可以安全调用readable.read()
,这意味着流尚未被销毁或发出“错误”或“结束”。
简而言之,这意味着流尚未完全消耗。由于 GET 请求的主体被忽略(它没有),与 POST 请求相比,您的中间件都不会读取它。所以这是意料之中的,对您的实际问题没有帮助。