如何通过GET请求动态搜索查询

时间:2016-05-19 21:44:53

标签: node.js express

我正在尝试在我的应用程序中发布一些GET路由,它将使用request.query在我的应用程序中处理简单的“GET ALL”查询和过滤数据查询。然后有更正确的方法:

a = b = c

?因为这种方式看起来很糟糕:| 正如你所看到的 - 我正在使用NodeJS和mongoose。 日Thnx!

1 个答案:

答案 0 :(得分: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);
    }
});

你可以拆分逻辑。你可以创建一个名为controllers的文件夹,它与数据库通信并创建一个处理数据并发送相应响应的album.js文件。这使您的代码可以重复使用并防止干燥(不要自己重复)。现在您有一个更干净的API。使用

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