1
nuptxxp OP 主要我发现给别人 api 应该是同步返回的,但是 nodejs 模式又是异步的,不知到是不是这样导致问题。
还有报错是 TypeError: listener must be a function at TypeError (native) at ClientRequest.once (events.js:190:11) at new ClientRequest (_http_client.js:93:10) at Object.exports.request ( http.js:49:10) at Object.exports.get ( http.js:53:21) |
2
oott123 2015-10-26 00:49:14 +08:00 via Android
看上去没有什么太多问题。
而且这也不是同步的,也是异步的。 |
3
imdjh 2015-10-26 07:50:29 +08:00
@nuptxxp
你错了几个点: http.get 返回的是 ClientRequest 类,是没有 success/error 方法的,需要用 on 方法监听事件。 success 是当服务器接收到头请求,返回 200 时被激发的,所以看你的要求应该监听返回的 response 事件(调用内部 api 的返回)。 异步传回来的对象被引用到 http.get()定义的回调函数的第一个参数中,是 IncomingMessage 的实例,用 data 方法就能得到你要异步 api 数据啦。 |
4
imdjh 2015-10-26 07:54:24 +08:00
var express = require('express');
var router = express.Router(); var http = require('http'); // 我的实现,测试通过,欢迎提出疑问。 router.get('/', function(req, res){ var apiUrl = 'http://www.djh.im'; var data; (function (theres) { var pres = theres; http.get(apiUrl + '/', function (res) { res.on('data', function (d) { data = d; pres.send(data.toString()); }); }) .on('success', function (data) { res.send(data); }) .on('error', function (data, status) { res.json({"code":1,"msg":fail}); }); })(res); }); module.exports = router; |
5
imdjh 2015-10-26 08:04:32 +08:00 1
@nuptxxp
又看了眼, 4L 那个有问题!! fix: 要把 send 改为 end ,不然无法被调用两次 =O 于是乎把各个地方简化了下: var express = require('express'); var router = express.Router(); var http = require('http'); // 我的实现,测试通过^2 ,欢迎提出疑问。 router.get('/', function(req, res){ var apiUrl = 'http://www.djh.im'; (function (theres) { var pres = theres; http.get(apiUrl + '/', function (res) { res.on('data', function (d) { pres.end(d.toString()); }); }) .on('error', function (data, status) { res.json({"code":1,"msg":fail}); }); })(res); }); module.exports = router; |
6
will0404 2015-10-26 09:41:40 +08:00 via iPhone
把给别人数据的方法写在你从后台得到数据的回调方法里 不知道我这样说清楚吗 你是用 node 做接入层吧
|
7
nuptxxp OP 谢谢大家,问题解决了,多谢^-^
|