2017-02-10 1 views
0

Ich verwendete Express und ftp Pakete, um eine Anwendung zu erstellen, die Postanforderungen empfängt und eine Verbindung zu meinem FTP-Server herstellt. Wenn ein falscher Benutzer oder ein falsches Passwort eingegeben wurde, habe ich versucht, c.on('error', callback) zu verwenden, um den Fehler zu erkennen und auf die Anmeldeseite umzuleiten.Kann Header nicht festlegen, nachdem sie gesendet werden Fehler bei der Verwendung von .on ('Fehler') in router.post()

signin.js

var router = require('express').Router(); 
var checkNotLogin = require('../middlewares/check').checkNotLogin; 
var c = new require('ftp')(); 

router.get('/', checkNotLogin, function(req, res, next){ 
    res.render('signin'); 
}); 

router.post('/', checkNotLogin, function(req, res, next){ 
    var name = req.body.usrname; 
    var password = req.body.password; 
    var option = { 
     port: 21, 
     host: 'localhost', 
     user: name, 
     pass: password 
    }; 

    c.on('ready', function(){ 
     req.session.user = name; 
     req.session.pass = password 
     console.log('You are connected'); 
     return res.redirect('/ftp/'+name); 
    }); 

    c.on('error', function(err){ 
     console.log(err.message); 
     return res.redirect('signin'); 
    }); 

    c.connect(option); 
}); 

module.exports = router; 

Das Problem ist, dass, wenn der falsche Benutzer oder Passwort beim ersten Mal auf die signin, die Umleitung eingegeben wird (selbst) Seite funktioniert. Wenn ich es jedoch erneut versuche, stürzte die App ab und es wurde gemeldet, dass "Header nach dem Senden nicht gesetzt werden können".

Vielen Dank im Voraus !!!!!

Antwort

2

Das Problem kommt aus dem Umfang Ihres FTP-Clients. Momentan wird es von allen Anfragen geteilt. Jedes Mal, wenn Sie c.on(...) aufrufen, fügen Sie demselben Client einen neuen Ereignis-Listener hinzu. Wenn also ein Ereignis ausgelöst wird, werden alle Listener benachrichtigt, was dazu führt, dass mehrere Antworten gesendet werden.

Sie müssen den FTP-Client auf Ihre Anfrage Anwendungsbereich:

var router = require('express').Router(); 
var checkNotLogin = require('../middlewares/check').checkNotLogin; 
var ftp = require('ftp'); 

router.get('/', checkNotLogin, function(req, res, next){ 
    res.render('signin'); 
}); 

router.post('/', checkNotLogin, function(req, res, next){ 
    var c = new ftp(); 
    var name = req.body.usrname; 
    var password = req.body.password; 
    var option = { 
     port: 21, 
     host: 'localhost', 
     user: name, 
     pass: password 
    }; 

    c.on('ready', function(){ 
     req.session.user = name; 
     req.session.pass = password 
     console.log('You are connected'); 
     return res.redirect('/ftp/'+name); 
    }); 

    c.on('error', function(err){ 
     console.log(err.message); 
     return res.redirect('signin'); 
    }); 

    c.connect(option); 
}); 

module.exports = router; 
+0

Wow, danke !!!! – XIAOAGE

Verwandte Themen