将 express 路由器分成多个文件
Breaking express router into multiple files
I googled this question and was initially quite hopeful at the number of responses. That hopefulness quickly turned into disappointment as I read through the first 4 links, as well as the Express documentation 并且找不到任何可行的解决方案来解决我的问题。我想将我的路线分成两个文件:一个文件用于 GET 请求,一个文件用于 POST 请求。 Internet 上的许多文章都暗示了执行此操作的能力,或者它们说明了如何执行此操作,但是是在非常特定于上下文的应用程序中。有人可以提供一个通用且完整的方法来将 Express 路由器分解成多个文件并带有代码示例吗?
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(...);
I googled this question and was initially quite hopeful at the number of responses. That hopefulness quickly turned into disappointment as I read through the first 4 links, as well as the Express documentation 并且找不到任何可行的解决方案来解决我的问题。我想将我的路线分成两个文件:一个文件用于 GET 请求,一个文件用于 POST 请求。 Internet 上的许多文章都暗示了执行此操作的能力,或者它们说明了如何执行此操作,但是是在非常特定于上下文的应用程序中。有人可以提供一个通用且完整的方法来将 Express 路由器分解成多个文件并带有代码示例吗?
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(...);