Nic*_*uin 8 node.js express sapper polka
我需要设置一个 Polka(或 Express)服务器,以便它可以从单个server.js入口点为多个应用程序(每个主机名一个)提供服务。可以使用vhost中间件 ( https://github.com/expressjs/vhost )来完成。每个app都作为一个中间件导出,在server.js的中间件链中添加了每个请求对应的那个。
但是,这些应用程序中的一些(不是全部)将是 Sapper 应用程序,因此设置必须与 Sapper 兼容。据我所知,Sapper 构建会生成一个server.js文件,该文件用作应用程序的入口点,但不会导出该应用程序。是否有导出 Sapper 应用程序的构建选项(而不是listen对其进行操作)?或者其他一些方法来做到这一点?
我尝试手动编辑构建并且它似乎可以工作,尽管文件路径存在一些问题,因为 Sapper 应用程序的根目录不是主应用程序的根目录。
我查了这个问题,但没有找到任何参考,所以我想知道我是否走错了路,是否有更明显的解决方案。(注意:我使用的 Node.js 托管不允许将主机名映射到应用程序文件夹,这当然会使事情变得更简单。)
您可以自己导出 Sapper 应用程序。在 Sapper 应用程序的 server.ts/server.js 中,您可以导出中间件,而不是启动服务器。像这样的东西:
import * as sapper from "@sapper/server";
export const handler = sapper.middleware();
Run Code Online (Sandbox Code Playgroud)
然后在您的 Express 应用程序中只需将域映射到导出的中间件:
const express = require('express');
const vhost = require('vhost');
const path = require('path');
const { handler } = require('./__sapper__/build/server/server');
const app = express();
app.use(vhost('*.example.com', (req, res, next) => {
if (req.vhost[0] === 'sapper') {
return handler(req, res, next);
}
return res.statusCode(400);
}))
app.listen(3000, () => console.log('Server started'));
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是在服务器上的不同端口中运行所有嵌套应用程序,并使用反向代理来相应地路由请求。
为了在不同端口上运行嵌套应用程序,可能的解决方案是对它们进行 docker 化或使用pm2。
对于反向代理部分,您可以使用 Nginx 或Traefik。还可以编写一个反向代理中间件来使用http-proxy-middleware以编程方式处理它
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |