const express = require(‘express’); const router = express.Router(); const http = require(“http”); router.get(’/’, function(req, res, next) { //发送请求 var request = http.request('http:test.test.com/getjson;,function(res){ res.setEncoding(‘utf8’); res.on(‘data’,function(chunk){ console.log(chunk); }); res.on(‘end’,(data)=>{ console.log(‘已无数据’);
})
});
//如果有错误会输出错误 request.on(‘error’, function(e){ console.log(‘错误:’ + e.message); }); request.end(); res.render(’/user/login’,chunk); }); module.exports = router;
在res.on('data')和res.on('end')中可以打印数据,但是怎样把数据返回来在最后 res.render()传回去呢?
是不是应该在 request.end();
之前把数据返回
参照朴大的《深入浅出NodeJS》,里面有专门讲 http 请求的章节,并特别关照了注意宽字节编码问题。 on('data')
接受数据,on(end)
处理数据
请求使用 request , 然后, pipe 回去?
@noraincode 就是说 在end里面怎么返回数据?
@htoooth 在 end() 可以打印数据 但是怎么返回出来?
@DevinXian 就是说 在end() 方法里可以打印数据 ,但是怎么把它返回呢?返回到上一层用router的res.render(’/tpl’,data)这里渲染到模版去
@lsfcode 如果初学的话,用回调函数吧
var express = require('express');
var router = express.Router();
var http = require('http');
router.get('/', function(req, res, next) {
var request = http.request('http://suggest.taobao.com/sug?code=utf-8&q=phone&callback=cb', function(response) {
var result = [];
var length = 0;
response.on('data', function(chunk) {
result.push(chunk);
length += Buffer.byteLength(chunk);
console.log(chunk);
});
response.on('end', (data) => {
if (data) {
result.push(chunk);
length += Buffer.byteLength(chunk);
}
console.log(Buffer.concat(result, length));
res.render('index', {
title: result.toString('utf-8')
});
})
});
//如果有错误会输出错误
request.on('error', function(e) {
console.log('错误:' + e.message);
res.render('index', {
title: 'Error'
});
});
request.end();
});
module.exports = router;
@carlisliu 确实可以! 但是这个length的作用是什么?