得到!错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设置标头|表现

问题描述

我收到错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头,然后在执行POST请求时将一些带有错误位置的长列表称为快速路由。我看到了类似的答案,有很多答案,但我找不到我想念的地方。

在这里,我附上了该特定POST请求的代码示例。

    .post(cors.corsWithOptions,authenticate.verifyUser,(req,res,next) => {
    Favorites.findOne({user: req.user._id})
    .then((favs)=> {
        if(!favs) {
            Favorites.create({user: req.user._id,dishes: req.body})
            .then((favs)=> {
                console.log('Favs created: ',favs);
                res.statusCode = 200;
                res.setHeader('Content-Type','application/json');
                res.json(favs);
            },(err) => next(err))
            .catch((err) => next(err));
        }
        else {
            var noofids = req.body.length;
            for (var i=0; i<noofids ; i++) {
                if(favs.dishes.indexOf(req.body[i]._id) > -1) {
                    res.json('It is already in the dishes');
                }
                else {
                    favs.dishes.push(req.body[i]._id);
                    favs.save()
                    .then((doc) => {
                        Favorites.findById(doc._id)
                        .populate('User').populate('Dishes')
                        .then((fav) => {
                            res.statusCode = 200;
                            res.setHeader('Content-Type','application/json');
                            res.json(fav);
                        },(err) => next(err))
                        .catch((err) => next(err));
                    },(err) => next(err))
                    .catch((err) => next(err));
                }
            }
        }
    },(err) => next(err))
    .catch((err) => next(err));

})

执行 if 部分时,它会执行无错误,但是执行 else 时,它将显示一长串错误。

POST /favorites/ 200 7.864 ms - 29
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:518:11)
    at ServerResponse.header (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\response.js:767:10)
    at ServerResponse.send (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\response.js:170:12)
    at done (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\response.js:1004:10)
    at Object.exports.renderFile (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\jade\lib\index.js:374:12)
    at View.exports.__express [as engine] (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\jade\lib\index.js:417:11)
    at View.render (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\view.js:135:8)
    at tryRender (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\application.js:640:10)
    at Function.render (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\response.js:1008:7)
    at E:\CourseraMERN\NodeJS\conFusionServer\app.js:84:7
    at Layer.handle_error (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\router\layer.js:71:5)
    at trim_prefix (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\router\index.js:315:13)
    at E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\router\index.js:335:12)
    at next (E:\CourseraMERN\NodeJS\conFusionServer\node_modules\express\lib\router\index.js:275:10)

如何纠正此问题?谢谢!

解决方法

请确保每个return语句都res.json(),否则代码将继续执行其下的行,并且您具有在多个位置设置标题的代码,这会导致错误:

.post(cors.corsWithOptions,authenticate.verifyUser,(req,res,next) => {
    Favorites.findOne({user: req.user._id})
    .then((favs)=> {
        if(!favs) {
            Favorites.create({user: req.user._id,dishes: req.body})
            .then((favs)=> {
                console.log('Favs created: ',favs);
                res.statusCode = 200;
                res.setHeader('Content-Type','application/json');
                return res.json(favs);
            },(err) => next(err))
            .catch((err) => next(err));
        }
        else {
            var noofids = req.body.length;
            for (var i=0; i<noofids ; i++) {
                if(favs.dishes.indexOf(req.body[i]._id) > -1) {
                    return res.json('It is already in the dishes');
                }
                else {
                    favs.dishes.push(req.body[i]._id);
                    favs.save()
                    .then((doc) => {
                        Favorites.findById(doc._id)
                        .populate('User').populate('Dishes')
                        .then((fav) => {
                            res.statusCode = 200;
                            res.setHeader('Content-Type','application/json');
                            return res.json(fav);
                        },(err) => next(err))
                        .catch((err) => next(err));
                    },(err) => next(err))
                    .catch((err) => next(err));
                }
            }
        }
    },(err) => next(err))
    .catch((err) => next(err));

})

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...