我正在尝试构建一个使用Express通过JSON输入的API。这似乎很简单,但是我遇到了错误[ERR_STREAM_WRITE_AFTER_END]: write after end
。
我的(非常简化的)(TypeScript)代码如下:
import express from 'express';
const app = express();
const jsonParser = express.json();
app.use(async (req, res, next) => {
// Common actions for all requests
console.log('Raw request:', req);
res.setHeader('Content-Type', 'application/json');
await next();
res.end();
});
app.post('/example', jsonParser, async (req, res) => {
console.log('Parsed request body:', req.body);
res.write('ok');
});
app.listen(3000);
当我发布一些JSON(简单地为{"test":"test"}
,并且以Content-Type: application/json
到127.0.0.1:3000/example时,我的程序崩溃,并显示“结束后写入”错误。我尝试了以下操作:
res.write('ok');
,它也不会崩溃(并返回空字符串),但这意味着我无法返回东西,这是不可接受的。app.use(...)
部分,就可以了,但是我真的很希望能够对那里的所有路线进行+/-前后处理,所以这不是令人满意的选择要么。我在做错什么吗,还是只是做不到我想做的事,而我应该坚持选择3号吗?
答案 0 :(得分:0)
error
是预期的。 关闭(或结束)后,您正在写入response
流。
await next(); // <-- This is calling you next middleware
res.end(); // meanwhile this is executed and closes the stream
您可以这样做:
app.use(async (req, res, next) => {
// Common actions for all requests
console.log('Raw request:', req);
res.setHeader('Content-Type', 'application/json');
next();
});
app.post('/example', jsonParser, async (req, res) => {
console.log('Parsed request body:', req.body);
res.write('ok');
res.end();
});