Ошибка выдачи Node Express при повторной отправке формы - PullRequest
0 голосов
/ 07 октября 2019

Я новичок в выражении. Я пишу демо-аутентификацию.

Но эта ошибка показывает

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

, когда происходит повторная отправка формы. Если я использую регистратор запросов, то он показывает, что я получаю один почтовый запрос. но функция обратного вызова в form.parse вызывается дважды. Я просто не могу понять, почему это происходит.

router.post('/signup', (req,res)=>{
    form.parse(req, (err, fld)=>{
        if(err) throw err;
        let name = fld.name;
        let pass = fld.password;
        let checkUser = users.filter(item=>{ item.name == name })


        if(checkUser.length >0){
            res.render('form.html', {err: 'Username Exists!'});
            console.log('**') // this line prints twice when a from is resubmitted
        }else{

            let user = new User(name, pass);
           users.push(user);

            save(users, './user.json', ()=>{
                res.end('you can log in now');
            });
        }

    })
})

Я использую ejs в качестве движка просмотра. users - массив пользовательских объектов .ave - функция для записи json-файлов. они просто отлично работают.

1 Ответ

0 голосов
/ 07 октября 2019

Я думаю, что получил ответ. Проблема была в создании грозного из объекта. То, что я сделал неправильно, я создал объект формы в начале сценария. Это сделало объект формы глобальным и вызвало проблему.

let form = new formidale.IncomingForm()

Мне пришлось создавать новые объекты формы для каждого отдельного запроса, то есть мне нужно было поместить эту строку в маршрут.

router.post('/signup', (req,res)=>{

    let form = new formidable.IncomingForm(); // this is where it should belong

    form.parse(req, (err, fld)=>{
        if(err) throw err;
        let name = fld.name;
        let pass = fld.password;
        let checkUser = users.filter(item=>{ 
            return item.name == name            
        })


        if(checkUser.length >0){
            res.render('form.html', {'err': 'Username Exists!'});
            console.log('2');

            return
        }else{
            console.log(3);

            let user = new User(name, pass);
           users.push(user);

            save(users, './user.json', ()=>{
                res.end('you can log in now');
            });
        }

    })
})


Теперь все работает нормально.

Я надеюсь, что этот ответ на мой собственный вопрос поможет кому-нибудь там когда-нибудь. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...