2016-05-19 8 views
0

私のアプリケーションでGETルートを公開しようとすると、単純な「GET ALL」クエリとフィルタリングされたデータクエリがrequest.queryを使用して処理されます。正しい方法:GETリクエストを使用して動的に検索クエリを作成する方法

if (!req.query) { 

    // Find query 
    albumsHandler.album.find({}, function (err, albums) { 
    if (!albums) return res.sendStatus(400); 
    res.send(albums); 

    if (mongoose.connection.readyState != CONSTS.MONGO_DISSCONECT_STATUS) { 
     mongoose.connection.close(); 
    }; 

    }); 
} 
else if (req.query.albumNumber) { 

    // Find query 
    albumsHandler.album.find({ albumNumber: req.query.albumNumber }, function (err, albums) { 
    if (!albums) return res.sendStatus(400); 
    res.send(albums); 

    if (mongoose.connection.readyState != CONSTS.MONGO_DISSCONECT_STATUS) { 
     mongoose.connection.close(); 
    }; 

    }); 

} 
else if (req.query.albumNumber && req.query.artistNumber) { 

    // Find query 
    albumsHandler.album.find({ albumNumber: req.query.albumNumber, artistNum: req.query.artistNumber }, function (err, albums) { 
    if (!albums) return res.sendStatus(400); 
    res.send(albums); 

    if (mongoose.connection.readyState != CONSTS.MONGO_DISSCONECT_STATUS) { 
     mongoose.connection.close(); 
    }; 

    }); 

} 

?この方法はひどく見えるので:|あなたが見る通り、 - 私はNodeJSとmongooseを使用しています。 Thnx!

答えて

0

この方法はひどく見えます。あなたが見ることができます

あなたはあなたのコードに次の変更を行うことができます。それはクリーナーと効率的になります。

var album = require('album'); 
router.get('/', function(req, res, next) { 
    if (!req.query) { 
     // Find all 
     album.getAll(req, res, next); 
    } 
    else if (req.query.albumNumber) { 
     // Find query for albumNumber 
     album.getAllNumbers(req, res, next); 
    } 
    else if (req.query.albumNumber && req.query.artistNumber) { 
     // Find query for albumNumber and artistNumber 
     album.getAlbumNumberAndArtists(req, res, next); 
    } 
}); 

あなたがデータベースに話をしてデータを処理し、適切な応答を送信album.jsファイルを作成し、コントローラと呼ばれるフォルダを作成することができますlogic.youを分割することができます。あなたはクリーナーAPI.Use

res.json({ 
    albums:albums 
}); 

res.jsonは、最終的に

//inside album.js 
//include mongoose 
//include models 

module.exports = { 
    getAll : function(req, res, next){ 
    albumsHandler.album.find({}, function (err, albums) { 
     if (!albums) return res.sendStatus(400); 
     res.send(albums); 

     if (mongoose.connection.readyState != CONSTS.MONGO_DISSCONECT_STATUS) { 
      mongoose.connection.close(); 
     } 
    }); 
    }, 

    getAllNumbers : function(req, res, next){ 
    albumsHandler.album.find({ albumNumber: req.query.albumNumber }, function (err, albums) { 
     if (!albums) return res.sendStatus(400); 
     res.send(albums); 

     if (mongoose.connection.readyState != CONSTS.MONGO_DISSCONECT_STATUS) { 
      mongoose.connection.close(); 
     } 

    }); 
    }, 

    getAlbumNumberAndArtists : function(req, res, next){ 
    albumsHandler.album.find({ albumNumber: req.query.albumNumber, artistNum: req.query.artistNumber }, function (err, albums) { 
     if (!albums) return res.sendStatus(400); 
     res.send(albums); 

     if (mongoose.connection.readyState != CONSTS.MONGO_DISSCONECT_STATUS) { 
      mongoose.connection.close(); 
     } 
    }); 
    } 
}; 
res.sendを呼び出してい.Nowこれは(自分を繰り返さない)あなたのコードを再利用可能になり、乾燥を防止します
関連する問題