怎么将一个 express 程序转换成模块化(Nodejs)

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

怎么将一个 express 程序转换成模块化(Nodejs)
外行,请见谅。
简单的说,假设我有两个网站,都是用 express 写的。分别是:
blog.domain.com、about.domain.com
现在我希望将其转换为:
domain.com/blog、domain.com/about。
通过一个现成的路由工具来分发。
那么对于原有的 blog express 程序来说,本来对其的访问 /20170507,就要变成 /blog/201706507。
我知道通过 route 功能可以让 /blog/201706507 返回 原有的 /20170507 的内容。
但是这还涉及到页面内链接,原有链接到 /20170507 的标签要重写到 /blog/20170507。这应该怎么做呢?程序使用 gulp 打包。

谢谢。


11 回复

我的设想是前台重写 jQuery 的 post 和 get (业务主要用了这两个)方法,在原 URL 中加入模块的 URL,不过貌似有点太底层了,即使只在一个页面里使用,影响范围也超出预期,出现各种意想不到的错误


不考虑通过负载均衡。

更深入一点说,有几个原因:
1. 已经有了一层负载均衡,不希望再搞个 Nginx。
2. 嫌 Nginx 配置起来什么的比较费事。还有一些没有在问题中提到的需求用 nodejs 写比较方便。

标签?查找全局替换行吗?

如果是 /20170507 这种相对路径,还有个<base>标签可以设置基准 url

express 不太清楚,koa 的话倒是有一个中间件 koa-mount 可以实现你的需求

用中间件的框架做这种都很简单。

问题是怎么修改页面上的内链。

express 本身就有 subapp 的概念,可以直接 mount 到父级路由

subapp 很轻松。楼主的关键问题是 express 渲染的 HTML 里的锚链地址如何跟随着自动变化。

在 Node.js 中,将 Express 程序转换为模块化结构可以提高代码的可读性和可维护性。下面是一个简单的示例,展示如何将一个基本的 Express 应用转换为模块化结构。

原始的非模块化代码

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
    res.send('Hello World!');
});

app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}/`);
});

模块化后的代码

  1. 创建一个 server.js 文件作为入口文件:
const express = require('express');
const app = express();
const helloRoute = require('./routes/hello');

app.use('/', helloRoute);

const port = 3000;
app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}/`);
});
  1. 创建一个 routes 文件夹,并在其中创建一个 hello.js 文件:
const express = require('express');
const router = express.Router();

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

module.exports = router;

通过这种方式,我们将 Express 应用中的路由逻辑拆分到了一个单独的模块中,使得主文件 server.js 更加简洁,并且路由逻辑更加清晰。这种方式有利于代码的扩展和维护,特别是在大型项目中。

回到顶部