代码之家  ›  专栏  ›  技术社区  ›  Pouya Jabbarisani

在express app中的函数中返回响应

  •  2
  • Pouya Jabbarisani  · 技术社区  · 5 年前

    “发送到客户端后无法设置标头” 错误。 然而,在下面的代码中,我试图返回响应,但它返回到我们的路由器,并导致上述错误。如何在函数中直接返回响应?

    router.post("/admins", async function (req, res) {
    
        var newAdminObj = await newAdminObjectDecorator(req.body, res);
    
        var newAdmin = new Admins(newAdminObj)
    
        newAdmin.save(function (err, saveresult) {
            if (err) {
                return res.status(500).send();
            }
            else {
                return res.status(200).send();
            }
        });
    });
    
    
    
    // the function
    var newAdminObjectDecorator = async function (entery, res) {
    
        // doing some kinds of stuff in here
    
        // if has errors return response with error code
        if (err) {
            // app continues after returning the error header response
            return res.status(500).send();
        }
        else {
            return result;
        }
    }
    
    0 回复  |  直到 5 年前
        1
  •  4
  •   Halil SAFAK    5 年前

    切勿运行控制器功能以外的响应操作。让另一个函数返回答案并根据答案进行决定。

    router.post("/admins", async function (req, res) {
    
        var newAdminObj = await newAdminObjectDecorator(req.body);
    
        if (newAdminObj instanceof Error) {
            return res.status(500).send()
        }
    
        var newAdmin = new Admins(newAdminObj)
    
        newAdmin.save(function (err, saveresult) {
            if (err) {
                return res.status(500).send();
            }
            else {
                return res.status(200).send();
            }
        });
    });
    
    
    
    // the function
    var newAdminObjectDecorator = async function (entery) {
    
        // doing some kinds of stuff in here
    
        // if has errors return response with error code
        if (err) {
            // app continues after returning the error header response
            return err;
        }
        else {
            return result;
        }
    }