请问如何将一个 express 主文件分成多个 Nodejs 模块

发布于 1周前 作者 wuwangju 来自 nodejs/Nestjs

请问如何将一个 express 主文件分成多个 Nodejs 模块

感觉启动文件里的 express 路由过多,写的时候把各个页面的功能( SQL 查询修改什么的)都写进去了,请问下有什么分离出去的写法吗? 主文件代码在这边 https://pastebin.com/vfL0emzY

16 回复

一楼坐等二楼回答


const app = express()
require(’./a’)(app)

//a 文件为函数
module.exports = function a(app){
//相关逻辑
}

在别的文件里写好处理方法,在需要的地方引入就行了啊
app.get(’/’, function (req, res) {
res.sendFile(path.join(__dirname + ‘/views/login.html’));
});
类似这个后面的处理函数就可以拿出去写在别的文件,一些公共的操作函数也是同理

const app = new express(),
appUI = new express(),
appAPI = new express();

appUI.get("/", (req, res) => {
res.redirect("/public/index.html");
});
appAPI.post("/user/login", (req, res) => {
//…
});

app.use([’/api’], appAPI)
app.use(appUI)
app.server = app.listen(3000);

前段时间 app.js 写太大被 leader 批了,目前的解决办法是用 express.Router()拆分成子路由
大概写法如下:

//app.js
const user = require(’./router/user’);
const patient = require(’./router/patient’);

app.use(’/user’,user)
app.use(’/patient’,patient)

//user.js
const router = require(‘express’).Router();

router.get((req,res) => {});
router.post((req,res) => {});

我也不确定我的写法是否合适,如果有问题希望各位大大指正一下

2333 我就是这样写的

话说楼主可以试试 Sequelize 框架,感觉自己写 SQL 会有很多冗余的代码。

实际的工程拆分问题像上面的方式并没有解决。
app.js 里只用设置基础配置即可,
然后引入一个路由主文件,如下所示:
var routes = require(’./routes’);
routes(app); // 加载路由

路由主文件 routes.js 如下所示:
var user = require(’./routers/userRouter’);
var order = require(’./routers/orderRouter’);

module.exports = function (app) {
user(app);
order(app);
}

这样具体某个路由就彻底从 app.js 、routes.js 这 2 个主文件中剥离,某个业务路由,比如 userRouter 如下:
module.exports = function(app) {
app.get("/user/login", login);
app.get("/user/register", register);
}

可以试试类 + 装饰器
https://github.com/orzyyyy/memo/blob/master/server/utils/decorator.ts
最后写成这样
https://github.com/orzyyyy/memo/blob/master/server/controller/MainPageController.ts
反正路由拆起来没完了,我的理解就是分类放就完,本身拆不拆无所谓

我一直用的二楼那种写法 但是感觉你这种优雅些 学习了

B 站全栈之巅的教程你可以看看

#5 感谢,学习了

app 放在 global 上 哪个文件都可以用

在 Node.js 中使用 Express 框架时,将主文件分成多个模块是一种良好的实践,可以提高代码的可读性和可维护性。下面是一个简单的示例,展示如何将一个 Express 应用拆分成多个模块。

首先,创建一个主文件 app.js

const express = require('express');
const app = express();
const routes = require('./routes'); // 引入路由模块

// 中间件设置等可以在这里进行
app.use(express.json());

// 使用路由模块
app.use('/', routes);

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

然后,创建一个 routes 文件夹,并在其中创建一个 index.js 文件:

const express = require('express');
const router = express.Router();

// 示例路由
router.get('/', (req, res) => {
  res.send('Hello, World!');
});

router.get('/about', (req, res) => {
  res.send('About Page');
});

module.exports = router;

在这个例子中,我们将路由逻辑从主文件 app.js 中分离出来,放入 routes/index.js 文件中。通过 require 方法,我们可以在主文件中引入并使用这个路由模块。

这种方法可以扩展到更多的模块,比如数据库连接、中间件、控制器等,每个模块负责特定的功能,从而使代码更加清晰和模块化。

回到顶部