在主模块 server.js 中:
消除 :
app.post('/abc', function (req, res) {
//code
});
app.post('/xyz', function (req, res) {
//code
});
app.post('/test', function (req, res) {
//code
});
并更改为
app.use(require("./router"));
在同一目录中创建文件 router.js 并添加:
var express = require('express');
var router = new express.Router();
router.post('/abc', function (req, res) {
//code
});
router.post('/xyz', function (req, res) {
//code
});
router.post('/test', function (req, res) {
//code
});
module.exports = router;
Edit1:
您可以将路线拆分为多个文件(在大型应用程序中可能有数百条路线)。实现它的策略很少,我展示一个:
创建新文件,在其中配置更多路由(例如,routes/route1.js、routes/route2.js):
在router.js中添加:
router.use(require("./routes/route1"));
router.use(require("./routes/route2"));
在路由 1.js 和路由 2.js 中创建与 router.js 类似的结构:
var express = require('express');
var router = new express.Router();
//place for routes
module.exports = router;
Edit2:OP在评论中提出了一个问题:
但是如果我连接到 sql 并在每个模块中使用查询那么为什么我要这样做
需要在每个模块中添加mysql连接代码吗?
当我们将代码拆分为多个模块时,我们应该尽量减少依赖。但是每个模块中的多个连接或其他资源匮乏的任务可能不是一个糟糕的选择。
我们可以在多个模块中共享公共资源实例。完成这项任务的方法有很多种。
我将只向您展示基本的(我将忽略全局污染):
假设我们有对象myCommonObjectInstance
,我们需要将它传递给多个模块
1)在主模块中(服务器.js):
app.set('someName',myCommonObjectInstance);
现在在路线中您可以执行以下操作:
router.post('/test', function (req, res) {
var myCommonObjectInstance = req.app.get('someName');
//other code
});
2)在主模块中(服务器.js)让我们创建中间件,将新属性添加到 req 或 res:
app.use(function(req,res,next){
req.myCommonObjectInstance = myCommonObjectInstance;
next();//very important!!!
});
现在在你的路线模块中:
router.post('/test', function (req, res) {
var myCommonObjectInstance = req.myCommonObjectInstance;
//other code
});
3)第三种流行的方法是注入模块,查看这篇文章了解更多详细信息:https://stackoverflow.com/a/9700884/4138339
简而言之,您创建模块并使用参数导出函数。当您在主模块中导入函数时,您会传递参数。
你的模块之一
module.exports = function (myCommonObjectInstance) {
//your code and you have access to myCommonObjectInstance
};
在主模块中
require('./yourmodule')(myCommonObjectInstance);