老师,你好,请教你一个关于将koa升级到2.x的问题,就是升级后,按照老师的方法去获取数据出现500错误,报错原因截图如下:
来源:10-5 为网站添加接口之线上HTTP接口调用

jiafu
2017-08-20
老师,你好,请教你一个关于将koa升级到2.x的问题,就是升级后,按照老师的方法去获取数据出现500错误,报错原因截图如下:,但在去掉return function(cb) {}这个外函数时,相关数据是可以拿得到的,请问是什么原因码?
exports.get_search_data = function(start, end, keyword) {
//返回一个异步函数,当接收回调时,返回数据
return function(cb) {
const http = require('http');
// 该模块的作用是把一个object对象,转换为http的查询参数
const qs = require('querystring');
let data = {
s: keyword,
start: start,
end: end
};
let query_str = qs.stringify(data);
let options = {
hostname: 'dushu.xiaomi.com',
port: 80, //显式指定
path: '/store/v0/lib/query/onebox?' + query_str,
method: 'GET'
};
//http请求
const req_obj = http.request(options, (res) => {
let content = '';
res.setEncoding('utf8'); //设置返回的数据格式
res.on('data', (chunk) => {
// console.log(`响应主体: ${chunk}`);
content += chunk;
});
res.on('end', () => {
console.log('响应中已无数据。');
console.log('######## 内容 ########');
console.log(content);
console.log('######## 内容 ########');
cb(null, content); //callback有两个参数err和返回的内容
// return content;
});
});
//请求错误处理
req_obj.on('error', (e) => {
console.error(`请求遇到问题: ${e.message}`);
});
// 使用 http.request() 必须总是调用 req.end() 来表明请求的结束,即使没有数据被写入请求主体。
req_obj.end();
}
};
1回答
-
jiafu
提问者
2017-08-24
问题已自行解决了,还是es6基础不过关啊,原因如下:
正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise的对象
exports.get_search_data = function(start, end, keyword) { //返回一个异步函数,当接收回调时,返回数据 return new Promise(function(resolve, reject) { try { const http = require('http'); // 该模块的作用是把一个object对象,转换为http的查询参数 const qs = require('querystring'); let data = { s: keyword, start: start, end: end }; let query_str = qs.stringify(data); let options = { hostname: 'dushu.xiaomi.com', port: 80, //显式指定 path: '/store/v0/lib/query/onebox?' + query_str, method: 'GET' }; //http请求 const req_obj = http.request(options, (_res) => { let content = ''; // let size = 0; // let chunks = []; _res.setEncoding('utf8'); //设置返回的数据格式 _res.on('data', (chunk) => { // console.log(`响应主体: ${chunk}`); // size += chunk.length; // chunks.push(chunk); content += chunk; }); _res.on('end', (e) => { // let content = Buffer.concat(chunks, size); console.log('响应中已无数据。'); console.log('######## 内容 ########'); console.log(content); console.log('######## 内容 ########'); resolve(content); // cb(null, content); //callback有两个参数err和返回的内容 }); }); //请求错误处理 req_obj.on('error', (e) => { console.error(`请求遇到问题: ${e.message}`); }); // req_obj.write() // 使用 http.request() 必须总是调用 req.end() 来表明请求的结束,即使没有数据被写入请求主体。 req_obj.end(); } catch (e) { console.log(e); } }); };
00
相似问题