首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
V2EX  ›  Node.js

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

  •  
  •   huyinjie · 43 天前 · 2875 次点击
    这是一个创建于 43 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 回复  |  直到 2019-09-21 18:07:13 +08:00
        1
    niknik   43 天前   ♥ 1
    一楼坐等二楼回答
        2
    onfuns   43 天前   ♥ 1
    const app = express()
    require('./a')(app)

    //a 文件为函数
    module.exports = function a(app){
    //相关逻辑
    }
        3
    Kusoku   43 天前   ♥ 1
    在别的文件里写好处理方法,在需要的地方引入就行了啊
    app.get('/', function (req, res) {
    res.sendFile(path.join(__dirname + '/views/login.html'));
    });
    类似这个后面的处理函数就可以拿出去写在别的文件,一些公共的操作函数也是同理
        4
    kzfile   43 天前   ♥ 1
    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);
        5
    VancleefL   43 天前   ♥ 1
    前段时间 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) => {});
        6
    VancleefL   43 天前   ♥ 1
    我也不确定我的写法是否合适,如果有问题希望各位大大指正一下
        8
    15651980765   43 天前   ♥ 1
    @VancleefL 2333 我就是这样写的
        9
    15651980765   43 天前   ♥ 1
    话说楼主可以试试 Sequelize 框架,感觉自己写 SQL 会有很多冗余的代码。
        10
    ruyuejun   43 天前   ♥ 1
    实际的工程拆分问题像上面的方式并没有解决。
    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);
    }
        11
    orzorzorzorz   43 天前   ♥ 1
    可以试试类 + 装饰器
    https://github.com/orzyyyy/memo/blob/master/server/utils/decorator.ts
    最后写成这样
    https://github.com/orzyyyy/memo/blob/master/server/controller/MainPageController.ts
    反正路由拆起来没完了,我的理解就是分类放就完,本身拆不拆无所谓
        12
    Pi7bo1   43 天前   ♥ 1
    @VancleefL 我一直用的二楼那种写法 但是感觉你这种`优雅`些 学习了
        13
    scyangjian   43 天前   ♥ 1
    B 站全栈之巅的教程你可以看看
        14
    huyinjie   43 天前
    @VancleefL #5 感谢,学习了
        15
    xcstream   31 天前
    app 放在 global 上 哪个文件都可以用
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1036 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 18:53 · PVG 02:53 · LAX 11:53 · JFK 14:53
    ♥ Do have faith in what you're doing.