zackyang000 / node-odata

A library for easily create OData REST API, abide by OData protocol.
http://zackyang000.github.io/node-odata/en/
MIT License
365 stars 65 forks source link

filter 参数 如果是中文,在程序中没有查询结果,但是同样的链接在 chrome中就能得到结果, #65

Closed weitangtang closed 8 years ago

weitangtang commented 8 years ago

英文参数 一切正常 1.程序中 :http://localhost:8613/projectinfo?$filter=dep%20eq%20%27abc%27 2.chrome地址栏:http://localhost:8613/projectinfo?$filter=dep%20eq%20%27abc%27

中文参数: chrome中正常,程序中返回 value:[]
http://localhost:8613/projectinfo?$filter=dep%20eq%20%27媒体9%27 是啥原因?

zackyang000 commented 8 years ago

不要使用 url encode 试试.

weitangtang commented 8 years ago

router部分代码如下,参数如果是中文,就返回value:[]。。。如果是数字,字符,字母都 都可以返回正确结果,很费解,帮忙瞅瞅 \ .get(function (req, res, next) { console.log('projectinfo.req.query',req.query); var querystr = '?$filter='; var array = []; for( var key in req.query){ array.push( key +' eq '+ "'"+req.query[key]+"'"); } if(array.length==1) { querystr+=array[0]; }else if(array.length>1) { querystr+=array[0]; for (i = 1; i < array.length ; i++) { querystr += ' and ' + array[i ]; } } var geturl = req.projectinfo.url+ querystr; console.log('projectinfo.getUrl', geturl);

    request.get(geturl, function (err, hres, body) {
        console.log('',body);
        res.send(body);
    })
})**
zackyang000 commented 8 years ago

中文可能确实有这个问题, 我需要测试一下.

zackyang000 commented 8 years ago

测试了一下, 在你的代码中你没有进行 url encode, 像这样.

修改前:

    request.get(geturl, function (err, hres, body) {
        console.log('',body);
        res.send(body);
    })

修改后:

    request.get(encodeURI(geturl), function (err, hres, body) {
        console.log('',body);
        res.send(body);
    })