我正在使用sailsjs而我正在尝试使用JSON内容类型返回响应。不知道为什么
Application.getEmailDuplicateCheck(options, function(error, result) {
console.log('Email duplicate check error', error);
console.log('Email duplicate check result', result);
if (error) {
return res.serverError(error);
}
if (result) {
return res.ok(result); /*** THIS IS LINE 180 ***/
}
});
并且不确定为什么它总是说“在发送后不能设置标题”因为我把所有响应都带回来了;
> Error: Can't set headers after they are sent.
> at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11)
> at ServerResponse.res.setHeader (/home/apps/cat/api/node_modules/express/node_modules/connect/lib/patch.js:134:22)
> at ServerResponse.res.set.res.header (/home/apps/cat/api/node_modules/express/lib/response.js:595:10)
> at ServerResponse.res.send (/home/apps/cat/api/node_modules/express/lib/response.js:151:12)
> at ServerResponse.res.json (/home/apps/cat/api/node_modules/express/lib/response.js:237:15)
> at ServerResponse.res.send (/home/apps/cat/api/node_modules/express/lib/response.js:139:21)
> at /home/apps/cat/api/api/controllers/DuplicateCheckController.js:180:16
答案 0 :(得分:1)
当您尝试多次发送响应时,会发生此错误。 对于REST请求,您只能发送一个响应。
在您的情况下 Application.getEmailDuplicateCheck 函数同时给出响应错误和结果。
所以它首先发射两次res.serverError和另一次res.ok
尝试:
<?php
答案 1 :(得分:0)
而不是:
if (error) {
return res.serverError(error);
}
if (result) {
return res.ok(result); /*** THIS IS LINE 180 ***/
}
请使用该语法:
if (error) {
return res.serverError(error);
} else {
if(!result) return res.notFound(); // if result is unknown
return res.ok(result);
}
为什么会出现此错误?
两个语句都被执行,因为可能(99%)你同时返回error
和result