node 请求 php接口时,使用http模块,怎样拿到返回的数据?
发布于 7 年前 作者 lsfcode 5310 次浏览 来自 问答

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()传回去呢?
9 回复

是不是应该在 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的作用是什么?

回到顶部