【问题标题】:node with express js for each loop每个循环都带有 express js 的节点
【发布时间】:2016-05-18 14:14:01
【问题描述】:

我将 express 与 node 一起用于我的 rest api,我需要运行一个 for 循环来确定输出 json。我的路线文件看起来

var Redis = require('ioredis')
var redis = new Redis({
    port: 6379,
    host: '127.0.0.1',
    family: 4,
    password: 'password',
    db: 0
});

var Jsonresult = {};
var process = function(lat,lon,dist,unit)
{
    Jsonresult.result = 'success';
    var vehicle_type = new Array('small','medium');  
    vehicle_type.forEach(function(vehicle, index, arr) 
    {
        redis.georadius ( vehicle,lat,lon ,dist,unit,'WITHCOORD','WITHDIST',function( ERR , Result ) 
        {
            if (ERR) 
            {
                console.log(ERR);
            }

            Jsonresult[vehicle] = Result;
        }) ;
    })

    return Jsonresult;
}

router.get('/:lat/:lon/:dist/:unit', function(req, res, next) {
    var lat = req.params.lat;
    var lon = req.params.lon; 
    var dist = req.params.dist;
    var unit = req.params.unit;
    res.json(process(lat,lon,dist,unit));
});

module.exports = router;

我预期的 json 输出是

{"result":"success","small":[["driver_1","0.2779",["56.507199704647064","-0.12500104133338397"]],["driver_2","0.2782",["56.50730162858963","-0.12500104133338397"]]],"medium":[]}

但我得到的只是

{"result":"success"}

代码有什么问题?

【问题讨论】:

  • 你在res.json();中通过Jsonresult了吗?
  • 是的,我添加了那个变量
  • 你为什么使用require('async-foreach').forEach
  • 传递GET请求时传递了什么?你能举个例子吗?
  • 我已经更新了问题,我的获取参数是/vehicles/56.5072/-0.1275/5/km

标签: javascript json node.js express asynchronous


【解决方案1】:

这样:

vehicle_type.forEach(function(vehicle, index, arr) {
   Jsonresult[vehicle] = true;
})

并在调用res.json()时传递result作为响应。

res.json(Jsonresult);

【讨论】:

  • 您好,我也试过这个。但是当我刷新页面时,预期的结果即将到来。但第一次没有来。
  • 也许你能解释一下你改变了什么以及为什么。
  • 那么,我猜,使用res.render(Jsonresult) 而不是res.json(Jsonresult);。让我知道这是否有效。
  • @FelixKling :我添加了 res.json(Jsonresult);
  • 据我所知,这不是你唯一改变的东西。
【解决方案2】:
vehicle_type.forEach(function(vehicle) 
{
    calls.push(function(callback){
        redis.georadius ( vehicle,lat,lon ,dist,unit,'WITHCOORD','WITHDIST',  function  ( ERR , Result ) 
        {
            if (ERR) 
            return callback(ERR);  

            Jsonresult[vehicle] = Result;
            callback(null, vehicle);


        });


      });
});

async.parallel(calls, function(err, result) {
if (err)
    return console.log(err);
res.json(Jsonresult);
 });

这终于解决了我的问题:回答here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 2015-08-11
    • 2020-03-09
    • 2011-06-06
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多