路由JS在路由中配置路由JS返回Not Found

时间:2015-01-13 07:11:59

标签: node.js express routes sails.js sails-postgresql

我正在使用Sails JS,PostgreSQL堆栈。

我想在网址末尾传递两个ID作为参数,如下所示:

  

/的getLocation /立方厘米/重

哪里' cc'是一个双字母的国家代码,例如US和' re'是对' cc'

中提及的国家/地区的自动填充查询

虽然仅使用cc作品,但添加额外参数会导致“找不到”#39;页。

以下是' config / routes':

'get /location/getRegion/:cc/:re': 'LocationController.getRegion'

指着说:

  

'本地主机/位置/ getRegion / US /或'

导致404。

虽然:

  

'本地主机/位置/ getRegion / US'

工作但显然这会输出美国的所有地区/州。第二个参数应该使用' contains'

进一步过滤此结果

关于如何使用这两个参数获得所需结果的任何想法?

这是

  

getRegion

我的

中的代码
  

LocationController

module.exports={
        getRegion:function(req, res, next){
        Regions.find({where:{country_code:req.param('cc')},region:{'contains':req.param('id')}},function selectRegions(err, regions){
            console.log(req.param('cc'))
            if(err) return next(err);
            if(!regions) return next();
            console.log(regions)
            res.json(regions)
        })
    }   
}

1 个答案:

答案 0 :(得分:0)

您的控制器代码很好地说明了我们不鼓励在Sails控制器操作中使用next的原因:它可能使调试变得困难。在您的情况下,您的find条件中包含以下内容:

region:{'contains':req.param('id')}

您的意思可能是req.param('re'),因为您的路线未提供id参数。因此查询将始终不返回任何结果,并且您最终调用next(),它将控制权返回给Sails路由器,该路由器与任何其他路由和宾果游戏,404不匹配。如果您更改了此项:

if(!regions) return next();

if(!regions) return res.notFound();

它会产生同样的效果,但你可能很快就会发现正在发生的事情。