最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Node Express重新提交表单时抛出错误

IT培训 admin 4浏览 0评论

Node Express重新提交表单时抛出错误

我是新来表达。我正在编写演示身份验证。

但显示此错误

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是用户对象的数组。save是写入json文件的函数。他们工作得很好。

回答如下:

我想我得到了答案。问题在于创建了强大的对象。我做错的是我在脚本的开头创建了表单对象。这使表单对象成为全局对象并引起了麻烦。

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');
            });
        }

    })
})


现在可以正常工作了。

我希望这个问题的答案能在某个时候帮助某个人。 :)

Node Express重新提交表单时抛出错误

我是新来表达。我正在编写演示身份验证。

但显示此错误

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是用户对象的数组。save是写入json文件的函数。他们工作得很好。

回答如下:

我想我得到了答案。问题在于创建了强大的对象。我做错的是我在脚本的开头创建了表单对象。这使表单对象成为全局对象并引起了麻烦。

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');
            });
        }

    })
})


现在可以正常工作了。

我希望这个问题的答案能在某个时候帮助某个人。 :)

发布评论

评论列表 (0)

  1. 暂无评论