我想用node去调用百度地图的api,通过url的方式。但是url里面有中文,如果直接把url用浏览器打开,会得到正确的结果(在这里我隐藏了我百度的key),不过在node里面使用request就不能得到正确的结果,我猜是url的encode有问题,查询过后解决不了。
感谢~
var request = require('request');
request(
{ method: 'GET',
header : {'Content-Type' : 'application/json; charset=UTF-8'},
uri: 'http://api.map.baidu.com/place/v2/suggestion?query=北京理工大学®ion=全国&output=json&ak=****hLQKu9ap9fPq5N1ExF1Kk7xe5Eah'
//uri:'http://www.baidu.com'
}
, function (error, response, body) {
// if(response.statusCode == 201){
// console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand)
// } else {
// console.log('error: '+ response.statusCode)
// console.log(body)
// }
res.json({
res:response
})
}
)
使用windwhinny的答案过后,有值返回了,但是格式我看不懂,看起来还是有点像json但是格式有点问题:
正确的返回值如下:
var request = require('request');
var URL = require('url');
request(
{ method: 'GET',
header : {'Content-Type' : 'application/json; charset=UTF-8'},
uri: URL.format({
protocol: 'http',
host: 'api.map.baidu.com',
pathname: '/place/v2/suggestion',
query: {
query: '北京理工大学',
region: '全国',
output: 'json',
ak: '****hLQKu9ap9fPq5N1ExF1Kk7xe5Eah',
}
}),
// 加上这一句,request 会自动将返回值解析为 json object
json: true,
//uri:'http://www.baidu.com'
}
, function (error, response, body) {
// if(response.statusCode == 201){
// console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand)
// } else {
// console.log('error: '+ response.statusCode)
// console.log(body)
// }
res.json({
res:response
})
}
)
如果想对单个字符串转码,就用 encodeURIComponent 这个方法。