我想问一下,怎么直接暴露JSON.
发布于 8 年前 作者 orbury 4485 次浏览 来自 问答

新浪API返回的JSON

{
    ret: 1,
    start: -1,
    end: -1,
    country: '中国',
    province: '上海',
    city: '上海',
    district: '',
    isp: '',
    type: '',
    desc: ''
}

node代码

class IP {
    constructor(){
        this.name = 'IPAPI';
    };
    getIpInfo(ip, cb){
        let options = {
            host: 'int.dpool.sina.com.cn',
            path: `/iplookup/iplookup.php?format=json&ip=${ip}`,
            method: 'get'
        };
        http.request(options, (response) => {
            var data = '';
            response.on('data',(chunk) => {
                data+= chunk;
            }).on('end', function () {
                data = JSON.parse(data);
                data.ip = ip;
                this.data = data;
                cb(null,data);
            }).on('error',function(){
                cb(null, {status:'Error!'});
            })
        }).end();
    }
}

这个JSON目前只能通过回调方式获取.

let ip = new IP();
ip.getIpInfo('180.157.199.109', (err,data) => { 
    console.log(data);
	// data = JSON
});

我想改成

let ip = new IP();
console.log(ip.getIpInfo('180.157.199.109');)
//ip.getIpInfo = JSON;

这样!

18 回复

你这是异步IO转同步IO

或者可以考虑做成形式上的同步IO,可以考虑用co.js或者pormise

@CoderIvan 朋友, 可以写个看看么!?

<div data-reactid=".0.1.0.5.2.0.0"><p data-reactid=".0.1.0.5.2.0.0.$0"><span data-reactid=".0.1.0.5.2.0.0.$0.0">不会promise或者generator你就回调嵌套吧</span></p></div>

@dlutwuwei 写了N次还没实现.

什么叫暴露json

这个我也用过 显示当前定位城市… $.getScript

@captainblue2013 目前只能通过

ip.getIpInfo('180.157.199.109', function(err,data)  { 
    console.log(data);
	// 这里的data输出的是新浪API的JSON
});

这个回调方式输出新浪API的JSON。 我想改成console.log(ip.getIpInfo('180.157.199.109));`就能输出新浪API的JSON。

@liyunzhi1993 这个是在NODEJS中请求,不是在客户端。

用streamline和aync的飘过

@orbury 建议先了解一下什么是异步io,然后自然就明白怎么写了…

@qimenxiaozi 别飘啊!能不能帮我把这个问题解决。新人,求帮助。

你现在的代码是回调的形式,可以改成同步的形式。es6的新特性:generator,再配上co更好。 但是本质上还是异步的,只不过代码看上去像同步的而已。

@huangshaohui 我试试, 谢谢你的意见。

@lonso 楼主的意思是同步编码不用理会回调。然而这需要一定的处理,比如async,promise等,否则就使用callback吧

@DevinXian 我尝试着写写, 这也是学习的过程, 哎! 要是有个对照, 我觉得, 学的就快多了. 自己看文档, 还是有很多不明白.

@lonso 其实我也不明白这是什么形式.

@lonso 我也只能试试, 我也是才学到回调这块。

回到顶部