将 Express 应用传递给路由文件
passing the express app to the routes files
我正在编写一个没有前端代码的 express 4 api 服务器。我选择构建我的项目,使文件夹结构基于项目的业务逻辑,而不是基于文件类型(路由、模型等)
例如,我的用户文件夹有我的 userRoutes.js、userModel、js、userApi.js、...
我的主要问题实际上是我应该如何将应用程序传递到我的路由文件中?我最喜欢的方法是 global.app 并使其全球化,但我听说这不是最佳做法。如果您对我的业务逻辑结构有任何建议,那也很好。
您必须像这样通过执行 require 函数来请求 express 应用程序或传递到路由文件:
var app = require('express');
var userRoutes= require('your route path')(app);
我认为全局变量不是个好主意。
首先,您的文件结构听起来很夸张。如果你需要那么多的东西来干净地把事情分开,那就去做吧。但是,我有预感你做得太过了。
无论如何,我通常做的是 return 来自每个模块的中间件。如果需要,您可以为每个中间件提供自己的 Express 路由器。在模块中:
const express = require('express');
module.exports = function (config) {
const router = new express.Router();
router.get('/something', (req, res) => {
// Code here
});
return router;
}
然后在您的主应用程序中:
const somethingHandler = require('somethingHandler.js');
app.use(somethingHandler);
这与所有其他 Express 中间件模块的工作方式一致。这也允许您通过路径命名模块,在主应用程序中使用 app.use()
调用。
我正在编写一个没有前端代码的 express 4 api 服务器。我选择构建我的项目,使文件夹结构基于项目的业务逻辑,而不是基于文件类型(路由、模型等)
例如,我的用户文件夹有我的 userRoutes.js、userModel、js、userApi.js、...
我的主要问题实际上是我应该如何将应用程序传递到我的路由文件中?我最喜欢的方法是 global.app 并使其全球化,但我听说这不是最佳做法。如果您对我的业务逻辑结构有任何建议,那也很好。
您必须像这样通过执行 require 函数来请求 express 应用程序或传递到路由文件:
var app = require('express');
var userRoutes= require('your route path')(app);
我认为全局变量不是个好主意。
首先,您的文件结构听起来很夸张。如果你需要那么多的东西来干净地把事情分开,那就去做吧。但是,我有预感你做得太过了。
无论如何,我通常做的是 return 来自每个模块的中间件。如果需要,您可以为每个中间件提供自己的 Express 路由器。在模块中:
const express = require('express');
module.exports = function (config) {
const router = new express.Router();
router.get('/something', (req, res) => {
// Code here
});
return router;
}
然后在您的主应用程序中:
const somethingHandler = require('somethingHandler.js');
app.use(somethingHandler);
这与所有其他 Express 中间件模块的工作方式一致。这也允许您通过路径命名模块,在主应用程序中使用 app.use()
调用。