我试图理解为什么下面的代码会抛出一个错误。
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冲突?
1条答案
按热度按时间6fe3ivhb1#
res.write
开始写主体,但在写之前,它必须写所有的头文件,之后你不能再写任何头文件。但是res.send
写一个额外的Content-Type
头文件,这取决于它的参数是Javascript对象还是字符串。因此,你不能在res.write
之后使用res.send
。res.send
应该单独使用,就像res.json
或res.render
一样。