0

Sails JS、PostgreSQL スタックを使用しています。

以下のように、URL の最後にパラメーターとして 2 つの ID を渡したい:

/getLocation/cc/re

ここで、「cc」は 2 文字の国コード (例: US) であり、「re」は「cc」で参照される国の地域のオートコンプリート クエリです。

cc のみを使用しても機能しますが、余分なパラメーターを追加すると、「見つかりません」ページが表示されます。

「config/routes」は次のとおりです。

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

指さして言う:

「localhost/location/getRegion/us/or」

404 になります。

その間:

「ローカルホスト/場所/getRegion/私たち」

動作しますが、明らかにこれは米国内のすべての地域/州を出力します。2 番目のパラメーターは、「contains」を使用してこの結果をさらにフィルター処理することになっています。

2 つのパラメーターを使用して目的の結果を達成する方法についてのアイデアはありますか?

こちらが

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

あなたのコントローラー コードは、nextSails コントローラー アクションでの使用をお勧めしない理由を示す良い例です。これにより、デバッグが困難になる可能性があります。あなたの場合、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 に答える