javascript - koa获取第三方API数据后,进行前端页面重定向和渲染时,报错:重复发送请求头。
迷茫
迷茫 2017-04-11 11:32:04
[JavaScript讨论组]

问题描述:表单数据提交到KOA后台,KOA后台请求第三方API数据,根据返回不同的数据,对页面进行重定向或者其他render操作。现在没有用request中间件,用的node原生http.request()请求API数据,但是不论是cxt.redirect()还是cxt.render()都会报Error: Can't set headers after they are sent.错误。

var http = require('http');
var querystring = require('querystring');

module.exports = {
    'POST /signin': async (ctx, next) => {
        //获取页面数据
        var username = ctx.request.body.username || '',
            password = ctx.request.body.password || '';

        // 封装HTTP请求的数据
        var postData = querystring.stringify({
            "UserName": username,
            "Password": password
        })
        // 设置HTTP请求选项
        var options = {
            host: 'apis.*******.com',
            path: '/common/v1/domain/security/authentication',
            method: 'PUT',
            headers:{
                "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
                "Accept": "application/json"
            }
        }

        // 发送HTTP请求
        var req = http.request(options, function(res){
            var dataJSON;
            console.log('Got Response :' + res.statusCode);
            res.on('data', function(d){
                dataJSON = JSON.parse(d);
                console.warn(dataJSON);
            });
            res.on('end', function(){
                if(dataJSON.Result){
                    //存储当前用户session
                    ctx.session.user = {
                        shortName: dataJSON.UserName,
                        password: dataJSON.Password,
                        userName: dataJSON.FullName
                    }
                    ctx.redirect('/list/A00');
                } else {
                    console.log('signin failed!');
                    ctx.render('signin-failed.html', {
                        title: 'Sign In Failed'
                    });
                }
            });
        });
        req.on('error', function(e){
        // console.error('Got Error:' + e.message);
            ctx.render('signin-failed.html', {
                title: 'Sign In Failed'
            });
        });
        req.write(postData);
        req.end();
    }
};

报错信息如下:

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号