请问如果将一个 express 主文件分成多个

2019-09-09 08:50:04 +08:00
 huyinjie

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

5661 次点击
所在节点    Node.js
15 条回复
niknik
2019-09-09 08:53:11 +08:00
一楼坐等二楼回答
onfuns
2019-09-09 09:00:46 +08:00
const app = express()
require('./a')(app)

//a 文件为函数
module.exports = function a(app){
//相关逻辑
}
Kusoku
2019-09-09 09:02:22 +08:00
在别的文件里写好处理方法,在需要的地方引入就行了啊
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname + '/views/login.html'));
});
类似这个后面的处理函数就可以拿出去写在别的文件,一些公共的操作函数也是同理
kzfile
2019-09-09 09:08:51 +08:00
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);
VancleefL
2019-09-09 09:11:47 +08:00
前段时间 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) => {});
VancleefL
2019-09-09 09:12:22 +08:00
我也不确定我的写法是否合适,如果有问题希望各位大大指正一下
justin2018
2019-09-09 09:31:34 +08:00
15651980765
2019-09-09 10:19:46 +08:00
@VancleefL 2333 我就是这样写的
15651980765
2019-09-09 10:24:14 +08:00
话说楼主可以试试 Sequelize 框架,感觉自己写 SQL 会有很多冗余的代码。
ruyuejun
2019-09-09 10:33:53 +08:00
实际的工程拆分问题像上面的方式并没有解决。
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);
}
orzorzorzorz
2019-09-09 11:04:32 +08:00
可以试试类 + 装饰器
https://github.com/orzyyyy/memo/blob/master/server/utils/decorator.ts
最后写成这样
https://github.com/orzyyyy/memo/blob/master/server/controller/MainPageController.ts
反正路由拆起来没完了,我的理解就是分类放就完,本身拆不拆无所谓
Pi7bo1
2019-09-09 11:09:43 +08:00
@VancleefL 我一直用的二楼那种写法 但是感觉你这种`优雅`些 学习了
scyangjian
2019-09-09 11:29:00 +08:00
B 站全栈之巅的教程你可以看看
huyinjie
2019-09-09 23:12:18 +08:00
@VancleefL #5 感谢,学习了
xcstream
2019-09-21 18:07:13 +08:00
app 放在 global 上 哪个文件都可以用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/599139

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX