发送错误后无法设置标头

时间:2016-08-06 18:17:51

标签: javascript node.js express

在我的app.js中我这样做

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

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

我没有看到任何错误,在路线/ 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;

1 个答案:

答案 0 :(得分:0)

您正在此行之前打印一些内容。 跟踪,或指示您的服务器将一些输出缓存到用户。 (如果服务器没有向用户显示任何内容,即使代码尝试先打印某些内容,也可以发送标题) 然而,这是一般知识,不熟悉node.js