我正在尝试在feathersjs应用中的路线上设置内容类型标头。
我一直遇到这个错误 - error: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
这就是我尝试设置标题的方法 -
const myService = {
create(data, params) { // create == POST request
console.log(data);
return Promise.resolve();
}
};
function setContent(req, res, next) {
res.setHeader('content-type', 'text/plain');
res.end();
next();
}
app.use('/incoming', myService, setContent);
我猜return Promise.resolve();
也设置了标头。我如何重写这一点?
答案 0 :(得分:1)
错误不是来自您的中间件,而是在之后注册的Feathers,因为您正在使用res.end()
结束响应,然后仍然调用{{1这可能不是你想要的。它应该是
next()
或者
function setContent(req, res, next) {
res.setHeader('content-type', 'text/plain');
res.end();
}
此外,服务方法总是必须返回一个对象,因此它至少应为function setContent(req, res, next) {
res.setHeader('content-type', 'text/plain');
next();
}
或return Promise.resolve(data);
答案 1 :(得分:0)
您需要在调用服务之前调用中间件, 试试这个
const myService = {
create(data, params) { // create == POST request
console.log(data);
return Promise.resolve();
}
};
function setContent(req, res, next) {
res.setHeader('content-type', 'text/plain');
next();
}
app.use('/incoming', setContent, myService);