2016-11-12 18 views
1

我是使用Express和Mongoose創建API的新手。模塊化我的Express/Mongoose API代碼,使其更容易使用

我目前爲一個留言集合設置了CRUD端點。

我想設置CRUD三個或多個集合(如用戶,文章,產品等等)

我想知道的是,如果有一種方法可以每一種分成單獨路由器文件,所以我沒有一個非常長的CRUD每個集合調用頁面。

這是我的API頁面的樣子:

//DEPENDENCIES 
var express = require('express'); 
var router = express.Router(); 


//GUESTBOOK END POINTS 
var Guestbook = require('../models/guestbook') 

router.route('/guestbook') 

.post(function(req, res) { 

    var guestbook = new Guestbook(); 

    guestbook.firstname = req.body.firstname; 
    guestbook.lastname = req.body.lastname; 
    guestbook.email = req.body.email; 
    guestbook.postedon = req.body.postedon; 
    guestbook.comment = req.body.comment; 
    guestbook.rate = req.body.rate; 

    guestbook.save(function(err) { 
     if (err) 
      res.send(err); 

     res.json({ message: 'Post created!' }) 

    }); 

}) 

.get(function(req, res) { 
    Guestbook.find(function(err, guestbook) { 
     if (err) 
      res.send(err); 

     res.json(guestbook); 
    }); 

}); 


router.route('/guestbook/:id') 

.get(function(req, res) { 

    Guestbook.findById(req.params.id, function(err, guestbook) { 
     if (err) 
      res.send(err); 

     res.json(guestbook); 

    }); 

}) 

.put(function(req, res) { 

    Guestbook.findById(req.params.id, function(err, guestbook) { 

     if (err) 
      res.send(err); 

     //USING OBJECT.KEYS TO UPDATE ONLY PARAMS PASSED 
     Object.keys(req.body).forEach(function(prop) { 
      if (typeof req.body[prop] !== 'undefined') { 
       guestbook[prop] = req.body[prop]; 
      } 
     }); 

     guestbook.save(function(err) { 

      if (err) 
       res.send(err); 

      res.json(guestbook); 

     }); 

    }); 

}) 

.delete(function(req, res) { 

    Guestbook.remove({ _id: req.params.id }, function(err, guestbook) { 
     if (err) 
      res.send(err); 
     res.json({ message: 'Successfully deleted!' }); 
    }); 

}); 


//RETURN ROUTER AS MODULE 
module.exports = router; 
+0

那麼,我一直都在問自己如何在不同的文件中分隔不同的路線。 – AndreaM16

+0

你知道我可能會看到一個很好的例子嗎? – cnak2

回答

1

我這樣做的方式,這是由功能在類似於這樣的結構分離出我的代碼:

index.js 
features/ 
-- user/ 
---- User.js 
---- userRoutes.js 
---- userCtrl.js 

所以您的代碼可能是這個樣子:

var express = require("express"); 
var router = express.Router(); 
var guestbookRoutes = require("./guestbookRoutes"); 

guestbookRoutes(router); 

module.exports = router; 

然後在guestbookRoutes

var guestbookCtrl = require("./guestbookCtrl"); 

module.exports = function(router) { 
    router.route("/guestbook") 
     .post(guestbookCtrl.postBook); 

    /* the rest of your routes */ 
} 

最後在guestbookCtrl.js你會有你的處理函數在一個對象中。

module.exports = { 
    postBook: function(req, res) { 

     var guestbook = new Guestbook(); 

     guestbook.firstname = req.body.firstname; 
     guestbook.lastname = req.body.lastname; 
     guestbook.email = req.body.email; 
     guestbook.postedon = req.body.postedon; 
     guestbook.comment = req.body.comment; 
     guestbook.rate = req.body.rate; 

     guestbook.save(function(err) { 
      if (err) 
       res.send(err); 

      res.json({ message: 'Post created!' }) 
     }); 
     } 
    } 
    /* the rest of your handler functions */ 

這使您可以將代碼分離成整潔的組件目錄和重點目的。希望這有助於!