路由 Meteor/React 应用以提供普通 HTML 主页
Routing a Meteor/React app to give it a plain vanilla HTML home page
我想使用 Meteor 和 React 来为网站提供服务,但我希望默认主页是普通的 HTML。像这样:
https://meteor.example.com/ => HTML page with no JavaScript
https://meteor.example.com/meteor/ => fully reactive Meteor experience
我知道我可以在 /public
文件夹中放置一个普通的 index.html 页面,但之后需要将其特别指定为 https://meteor.example.com/index.html
。
我找不到解决这种特殊情况的教程。
我找到了一个简单的解决方案,不需要对 Meteor 应用程序进行任何更改。我正在使用 nginx 为 Meteor 站点提供服务。我在本地端口上将应用程序连接到 运行,并在 nginx 中设置代理规则:
server {
listen 80;
server_name example.com;
charset utf-8;
location ~ /(.+) {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
据我了解,这会将 url 请求传递给 Meteor 应用程序。如果 public/
文件夹中有一个 index.html
文件,当对 http://example.com/
发出请求时,将提供该文件而不是 Meteor 应用程序。
(如果我像原来那样使用 location /
而不是 location ~ /(.+)
,那么对 http://example.com/
的请求将被视为对 Meteor 默认页面的请求。)
正在部署
为了生产,我创建了一个包...
meteor build --server-only ../example-package
...我上传到服务器并解压。然后我 cd
进入 bundle/programs/server
和 运行 npm install --production
作为将 运行 应用程序的用户。然后我将文件夹添加为 bundle/tmp/
和 bundle/public/
并将我的静态 index.html
文件和所有 CSS 以及它需要的其他文件放在 public/
文件夹中。
目前我正在使用 export ROOT_URL=http://localhost && export PORT=3000 && node main.js
启动应用程序,但我计划在完成所有正确的步骤后立即使用 Phusion Passenger Standalone。
这里是一个使用WebApp with Assets的例子
以下代码将进入仅服务器端文件,例如流星项目中的 /server/main.js
WebApp.connectHandlers.use('/home', (req, res, next) => {
res.writeHead(200, {'Content-Type': 'text/html'});
const html = Assets.getText('home.html');
res.end(html);
});
我想使用 Meteor 和 React 来为网站提供服务,但我希望默认主页是普通的 HTML。像这样:
https://meteor.example.com/ => HTML page with no JavaScript
https://meteor.example.com/meteor/ => fully reactive Meteor experience
我知道我可以在 /public
文件夹中放置一个普通的 index.html 页面,但之后需要将其特别指定为 https://meteor.example.com/index.html
。
我找不到解决这种特殊情况的教程。
我找到了一个简单的解决方案,不需要对 Meteor 应用程序进行任何更改。我正在使用 nginx 为 Meteor 站点提供服务。我在本地端口上将应用程序连接到 运行,并在 nginx 中设置代理规则:
server {
listen 80;
server_name example.com;
charset utf-8;
location ~ /(.+) {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
据我了解,这会将 url 请求传递给 Meteor 应用程序。如果 public/
文件夹中有一个 index.html
文件,当对 http://example.com/
发出请求时,将提供该文件而不是 Meteor 应用程序。
(如果我像原来那样使用 location /
而不是 location ~ /(.+)
,那么对 http://example.com/
的请求将被视为对 Meteor 默认页面的请求。)
正在部署
为了生产,我创建了一个包...
meteor build --server-only ../example-package
...我上传到服务器并解压。然后我 cd
进入 bundle/programs/server
和 运行 npm install --production
作为将 运行 应用程序的用户。然后我将文件夹添加为 bundle/tmp/
和 bundle/public/
并将我的静态 index.html
文件和所有 CSS 以及它需要的其他文件放在 public/
文件夹中。
目前我正在使用 export ROOT_URL=http://localhost && export PORT=3000 && node main.js
启动应用程序,但我计划在完成所有正确的步骤后立即使用 Phusion Passenger Standalone。
这里是一个使用WebApp with Assets的例子 以下代码将进入仅服务器端文件,例如流星项目中的 /server/main.js
WebApp.connectHandlers.use('/home', (req, res, next) => {
res.writeHead(200, {'Content-Type': 'text/html'});
const html = Assets.getText('home.html');
res.end(html);
});