怎么将一个 express 程序转换成模块化(Nodejs)
怎么将一个 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 打包。
谢谢。
我的设想是前台重写 jQuery 的 post 和 get (业务主要用了这两个)方法,在原 URL 中加入模块的 URL,不过貌似有点太底层了,即使只在一个页面里使用,影响范围也超出预期,出现各种意想不到的错误
nginx
不考虑通过负载均衡。
更深入一点说,有几个原因:
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}/`);
});
模块化后的代码
- 创建一个
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}/`);
});
- 创建一个
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
更加简洁,并且路由逻辑更加清晰。这种方式有利于代码的扩展和维护,特别是在大型项目中。