模块化我的Express/Mongoose API代码,使其更易于使用

模块化我的Express/Mongoose API代码,使其更易于使用,express,mongoose,Express,Mongoose,我不熟悉使用Express和Mongoose创建API 我目前为留言簿集合设置了CRUD端点 我想为三个或更多集合(例如用户、帖子、产品等)设置CRUD 我想知道的是,是否有一种方法可以将每一个集合分离成单独的路由器文件,这样我就不会为每一个集合调用一个很长的CRUD页面 以下是我的API页面的外观: //DEPENDENCIES var express = require('express'); var router = express.Router(); //GUESTBOOK END

我不熟悉使用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;

我这样做的方式是通过在一个类似于以下内容的结构中按特性分离代码:

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 */

这允许您将代码分离到整洁的组件目录中,并有针对性。希望这有帮助

嗯,我一直在问自己如何在不同的文件中分离不同的路由。你知道我可以看一个好的例子吗?