koa获取第三方API数据后,进行前端页面重定向和渲染时,报错:重复发送请求头。
问题描述:表单数据提交到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();
}
};
报错信息如下:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我用koa2利用request库请求豆瓣api,可以获取数据,但无法通过ctx.body返回前端,百度有些说request返回回调函数而async要求返回Promise,于是换成request-promise库,在then中使用ctx.body,前端还是获取不到,到底怎么用呢?