发送后无法设置标头

时间:2017-01-01 16:55:23

标签: node.js sails.js

我正在使用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

2 个答案:

答案 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%)你同时返回errorresult