跳到主要内容
CNode

我想问一下,怎么直接暴露JSON.

问答
Oorbury发布于 10 年前最后回复 10 年前
1857960

新浪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)

O
orbury#1810 年前

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

O
orbury#1710 年前

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

O
orbury#1610 年前

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

D
DevinXian#1510 年前

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

O
orbury#1410 年前

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

H
huangshaohui#1310 年前

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

T
TimothyJin#1210 年前

请用php

O
orbury#1110 年前

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

Q
qimenxiaozi#1010 年前
引用 orbury@liyunzhi1993 这个是在NODEJS中请求,不是在客户端。

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

Q
qimenxiaozi#910 年前

用streamline和aync的飘过

O
orbury#810 年前

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

O
orbury#710 年前

@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。

L
liyunzhi1993#610 年前

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

C
captainblue2013#510 年前

什么叫暴露json

O
orbury#410 年前

@dlutwuwei 写了N次还没实现.

D
dlutwuwei#310 年前

不会promise或者generator你就回调嵌套吧

O
orbury#210 年前

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

C
CoderIvan#110 年前

你这是异步IO转同步IO

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

参与回复

登录后即可参与回复。登录