【问题标题】:Can't set headers after they are sent node js发送节点js后无法设置标头
【发布时间】:2015-04-06 02:45:41
【问题描述】:

我正在尝试发送一些表单数据,但使用 express.js 时出现此错误:

发送后无法设置标头。

这是我目前的代码:

app.post('/api/users/profile/:username', isAuthenticated, userUploads, function(req, res, next) {
    if (req.params.username) {
        User.findOne({ username: req.params.username }, function(err, user) {
            if (err) return next(err);
            user.profile.name = req.body.name;
            user.profile.gender = req.body.gender;

            var files = req.files.file;
            if (files){
                if (files.length > 0){
                    for (f in files){
                        user.profile.pictures.push(files[f])
                    }
                }else{
                    user.profile.pictures.push(files)
                }
            }
            user.save(function(err) {
                if (err) return next(err);
                res.send(200);
            });

            console.log(res.send(user)) //HERE IS WHERE I GET THE ERROR

        });
    }else{
        return res.send(400, { message: 'User does not exist!!' });
    }
});

【问题讨论】:

    标签: javascript node.js express multer


    【解决方案1】:

    通过控制台记录 res.send(user) 您再次发送。您只能发送一次。

    app.post('/api/users/profile/:username', isAuthenticated, userUploads, function(req, res, next) {
        if (req.params.username) {
            User.findOne({ username: req.params.username }, function(err, user) {
                if (err) return next(err);
                user.profile.name = req.body.name;
                user.profile.gender = req.body.gender;
    
                var files = req.files.file;
                if (files){
                    if (files.length > 0){
                        for (f in files){
                            user.profile.pictures.push(files[f])
                        }
                    }else{
                        user.profile.pictures.push(files)
                    }
    
                }
                user.save(function(err) {
                    if (err) return next(err);
                    res.status(200).send(user);
                });
    
            });
        }else{
            return res.send(400, { message: 'User does not exist!!' });
        }
    });
    

    【讨论】:

    • 从技术上讲,console.log(res.send(user)) 可能是第一次发送,因为当user.save() 完成时,另一个稍后会发送。不过,删除 console.log(res.send(user)) 是正确的解决方法。
    • 该死的你明白了.. 谢谢老兄!!
    • @jfriend00,你是绝对正确的。知道发生了数据库往返。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多