首页 > node.js 发送 带有中文的http request出错,如何解决?

node.js 发送 带有中文的http request出错,如何解决?

我想用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=北京理工大学&region=全国&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 这个方法。

【热门文章】
【热门文章】