NodeJS 在res.send之前使用res.write会导致错误

nnsrf1az  于 2022-11-03  发布在  Node.js
关注(0)|答案(1)|浏览(168)

我试图理解为什么下面的代码会抛出一个错误。

app.get("/", (req, res) => {
    res.write("Hello");
    res.send(" World!");
})
// Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

app.get("/", (req, res) => {
    res.write("Hello");
    res.write(" World!");
    res.end();
})
// Works fine

我看不出在res.send之后如何设置头,因为res.send是设置头的人。
我在网上看到res.send相当于res.write + res.end,但这表明它并不完全正确。
我希望能够将基本数据写入响应,然后使用res.send执行它的有用任务,如根据发送的数据自动设置Content-Type头。

app.use((req, res, next) => {
    res.write("Base data");
    next();
})

app.get("/", (req, res) => {
    res.send("Route specific data");
})
// Result: Base data + Route specific data

除了res.write之外,是否还有其他方法可以让我将数据写入响应,但又不与res.send冲突?

6fe3ivhb

6fe3ivhb1#

res.write开始写主体,但在写之前,它必须写所有的头文件,之后你不能再写任何头文件。但是res.send写一个额外的Content-Type头文件,这取决于它的参数是Javascript对象还是字符串。因此,你不能在res.write之后使用res.send
res.send应该单独使用,就像res.jsonres.render一样。

相关问题