【问题标题】:Can't set headers after they are sent error发送错误后无法设置标头
【发布时间】:2016-08-06 18:17:51
【问题描述】:

在我的 app.js 中我这样做

app.use(function(req, res, next){

  if(!req.user){
    return res.redirect('/login_');
  }
  next();
})

我没有发现任何错误,在 route/index.js 中我发现了

router.get('/login_', function(req, res) {
    res.render('login', { user : req.user });
});

但是我遇到了一个错误。我知道这是由请求未结束引起的,但我上面的代码有什么问题?对这个错误一无所知。

route/index.js 的完整代码

var express = require('express');
var passport = require('passport');
var Account = require('../models/account');

var router = express.Router();

var multer = require('multer');
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'public/uploads')
    }
})

var upload = multer({ storage: storage })
var Photo = require('../models/photos');

router.get('/', function(req, res, next) {
  if(req.user){
    res.redirect('/'+req.user.username+'/screen');
  }else{
    res.redirect('/login_');
  }
});

router.get('/:username/screen', function(req, res, next) {
  res.render('screen', { user : req.user });
});

router.get('/:username', function(req, res, next) {
  var excludes = ["/login_", "/register_","/logout_"];
  if (excludes.indexOf(req.originalUrl) > -1){
    return next();
  }else{
    res.render('upload_photo');
  }
});

router.post('/:username', upload.any(), function(req, res, next) {

    var excludes = ["/login_", "/register_","/logout_"];
    if (excludes.indexOf(req.originalUrl) > -1){
      return next();
    }else{
      var photo = new Photo({
        photo:req.files[0].filename,
        caption:req.body.caption
      });
       
      photo.save(photo);
      res.sendStatus(200);
    }

  	
});

router.get('/:username/manager', function(req, res, next) {
  Photo.getAllPhotos(function(err,result){
    var headers = req.headers.host;
    var pathname = '128.199.128.108:3000';
    
    if(headers.indexOf('localhost') > -1){
      pathname = 'localhost:3000'
    }

    res.render('manager',{pathname:pathname,photos:result});
  });
});

//* passport for register/login_ *//
router.get('/register_', function(req, res) {
    res.render('register', { });
});

router.post('/register_', function(req, res) {
    Account.register(new Account({ username : req.body.username }), req.body.password, function(err, account) {
        if (err) {
            return res.render('register', { account : account });
        }

        passport.authenticate('local')(req, res, function () {
            res.redirect('/');
        });
    });
});

router.get('/login_', function(req, res) {
    res.render('login', { user : req.user });
});

router.post('/login_', passport.authenticate('local'), function(req, res) {
    res.redirect('/');
});

router.get('/logout_', function(req, res) {
    req.logout();
    res.redirect('/login_');
});



module.exports = router;

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    您正在此行之前打印一些内容。 要么跟踪它,要么指示您的服务器将一些输出缓存给用户。 (如果服务器没有向用户显示任何内容,则可以发送标头,即使代码之前尝试打印某些内容) 不过这是常识,不熟悉node.js

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2018-06-29
      • 2013-12-22
      • 1970-01-01
      • 2017-12-22
      • 2015-08-10
      • 2018-09-02
      相关资源
      最近更新 更多