路由 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);
});