Javascript 将express router拆分为多个文件

Javascript 将express router拆分为多个文件,javascript,express,Javascript,Express,最初对回应的数量相当乐观。当我阅读了前4个链接以及其他链接后,这种希望很快就变成了失望,并且没有找到任何可行的解决方案。我想将我的路由分为两个文件:一个用于GET请求的文件和一个用于POST请求的文件。互联网上的许多文章都暗示了这一点,或者它们说明了如何在特定于上下文的应用程序中实现这一点。有人能提供一个通用的和完全完整的方法,以打破一个快速路由器成多个文件的代码示例吗 router.js var express = require('express'); var models = requir

最初对回应的数量相当乐观。当我阅读了前4个链接以及其他链接后,这种希望很快就变成了失望,并且没有找到任何可行的解决方案。我想将我的路由分为两个文件:一个用于GET请求的文件和一个用于POST请求的文件。互联网上的许多文章都暗示了这一点,或者它们说明了如何在特定于上下文的应用程序中实现这一点。有人能提供一个通用的和完全完整的方法,以打破一个快速路由器成多个文件的代码示例吗

router.js

var express = require('express');
var models = require('../db/models.js');
var util = require('../core/utilities.js');
var router = express.Router();

router.get('/messages', function (req, res) {
  util.log('RECEIVED a GET request', req.query);

  models.retrieveMarks(req.query)
    .then(function(msg) {
      util.log('SENT message array to user', msg);
      res.status(200);
      res.send(msg);
    }, function(err) {
      util.log('SENT error code to user', err);
      res.sendStatus(400);
    });
});

router.post('/messages', function(req, res) {
  util.log('RECEIVED a POST request', req.body);

  //input: {x: float, y: float, z: float, message: string, userToken: string}
  models.createMessage(req.body)
    .then(function(msg) {
      util.log('SENT success code to user', msg);
      res.sendStatus(201);
    }, function(err) {
      util.log('SENT error code to user', err);
      res.sendStatus(400);
    });
});

//input: {userToken: string}
router.post('/usertoken', function (req, res) {
  var token = req.body.userToken;
  util.log('RECEIVED a new user token from user', token);

  models.createUser(token)
    .then(function(user) {
      util.log('SENT success code to user', user);
      res.sendStatus(201);
    }, function(err) {
      util.log('SENT error code to user', err);
      res.sendStatus(400);
    });
});

//input: {messageId: string, userToken: string}
router.post('/upvote', function (req, res) {
  util.log('RECEIVED upvote request', req.body);
  models.createVote(+req.body.messageId, req.body.userToken);
  res.sendStatus(200);
});

//input: {messageId: string, message: string}
router.post('/comment', function (req, res) {
  util.log("RECEIVED comment", req.body);
  models.createComment(req.body);
  res.sendStatus(200);
});

router.get('/comment', function(req, res) {
  util.log('RECEIVED a GET request', req.query);
  models.retrieveComments(+req.query.messageId)
    .then(function(comments) {
      util.log('SENT comments to user', comments);
      res.status(200);
      res.send(comments);
    }, function(err) {
      util.log('SENT error code to user', err);
      res.sendStatus(400);
    });
});

router.use(express.static(__dirname + '/../landing'));

module.exports = router;

使用共享路由器的一种解决方案:

// router.js
var router = express.Router();
require('./get-routes')(router);
require('./post-routes')(router);

// get-routes.js
module.exports = function(router) {
  router.get(...);
};

// post-routes.js
module.exports = function(router) {
  router.post(...);
};
另一种解决方案是使用嵌套路由器:

// router.js
var router = module.exports = require('express').Router();
router.use(require('./get-routes'));
router.use(require('./post-routes'));

// get-routes.js
var router = module.exports = require('express').Router();

router.get(...);

// post-routes.js
var router = module.exports = require('express').Router();

router.post(...);

我不明白这将如何编译。对于我得到的第一个解决方案:“TypeError:require(…)不是函数”第二个解决方案的应用程序定义在哪里?@etayluz这是一个Express应用程序(
var app=Express()
),谢谢@robertklep;但是,
var app=express()
通常在server.js或app.js文件中声明,该文件作为
node app
node server
执行。如何在第二个解决方案的上下文中包含或执行router.js?@etayluz请参见编辑(它没有解释应用程序级设置的全部内容,但它确实显示了我可能在2年前打算编写的内容)。归根结底,这在很大程度上取决于偏好,不一定有一个好的方法来实现这一点。