0

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

我想在 url 的末尾传递两个 id 作为参数,如下所示:

/getLocation/cc/re

其中“cc”是两个字母的国家/地区代码,例如 US,“re”是对“cc”中提到的国家/地区的自动完成查询

虽然仅使用 cc 有效,但添加额外参数会导致“未找到”页面。

这是“配置/路线”:

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

指点说:

'本地主机/位置/getRegion/我们/或'

结果是404。

尽管:

'本地主机/位置/getRegion/我们'

有效,但显然这会输出美国的所有地区/州。第二个参数应该使用“包含”进一步过滤此结果

关于如何使用这两个参数达到预期结果的任何想法?

这里是

获取区域

我的代码

位置控制器

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)
        })
    }   
}
4

1 回答 1

0

您的控制器代码很好地说明了我们为什么不鼓励next在 Sails 控制器操作中使用:它会使调试变得困难。在您的情况下,您的find标准中有以下内容:

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

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

if(!regions) return next();

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

它会产生相同的效果,但您可能会更快地了解正在发生的事情。

于 2015-01-13T18:22:02.157 回答