2016-05-19 3 views
0

Я пытаюсь опубликовать в моем приложении некоторый маршрут GET, который будет обрабатывать как простой запрос «Получить ВСЕ», так и отфильтрованный запрос данных в моем приложении с помощью 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); 
    } 
}); 

можно разделить logic.you может создать папку с именем контроллеры, которые говорят с базами данных и создать album.js файл, который обрабатывает данные и передает соответствующий ответ. Это делает ваш код для повторного использования и предотвращения высыхания (не повторяться) .Теперь у вас есть очиститель API.Use

res.json({ 
    albums:albums 
}); 

res.json в конечном итоге вызывает res.send

//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(); 
     } 
    }); 
    } 
};