2016-04-05 19 views
0

Я разрабатываю веб-приложение Express с Node JS в гибкой среде Google App Engine (управляемые виртуальные машины). В основном у меня есть только одна статическая HTML-страница, которую мне нужно обслуживать, поскольку все динамически загружается в Angular JS.Служить html-файл с NodeJS и служить-статическим

При чтении Экспресс best practices Я заметил, что они препятствуют использованию res.sendFile, что я и делал в разработке.

Поскольку я перехожу к производству, я хотел бы использовать static-serve, как было предложено, но я не смог найти документацию, объясняющую, как имитировать res.sendFile.

Ниже вы можете найти мой текущий код.

var app = express(); 
app.use(express.static('www')); 
app.get('/', oauth2.required, function (req, res) { 
// ... 
res.sendFile(path.join(__dirname + '/www/dashboard.html')); 
// ... 
}); 
+0

В производстве можно использовать сервер Nginx, чтобы служить вам статический файл и пусть вы node.js сервер обработки динамического контента. Это, как правило, наиболее оптимизированное решение для сокращения запросов на вашем сервере node.js, который медленнее статических файлов сервера, чем, например, nginx. – Aaleks

+0

Проблема в том, что я работаю на App Engine Flexible, и я не знаю, есть ли у меня доступ к конфигурации nginx. – raz3r

+0

Никогда не использовал его, но, похоже, после быстрого поиска в Google кажется, что можно установить собственный nginx https://cloud.google.com/appengine/docs/flexible/ Настройка инфраструктуры и https: // облако. google.com/solutions/https-load-balancing-nginx, но распространенное промежуточное ПО по умолчанию для обслуживания статических файлов будет делать трюк также app.use ('/ public', express.static (path.join (__ dirname, './public «))); – Aaleks

ответ

1

Для обслуживания статического файла можно определить статическое содержимое папки в expressJS

app.use('/public', express.static(path.join(__dirname, './public'))); 

, который означает, что каждые файлы в вас общие папки будут послужившими статическим контентом, когда вы нажмете и URL, как mydomain.com/public/image.png

EDIT: если это возможно в вашей среде Dev

Вы можете использовать сервер nginx для обслуживания статического файла и позволить серверу node.js обрабатывать динамический контент. Это, как правило, наиболее оптимизированное решение для сокращения запросов на вашем сервере node.js, который медленнее статических файлов сервера, чем, например, nginx.

Конфигурацию Nginx может быть

root /home/myapp; 

    # Add index.php to the list if you are using PHP 
    index index.html index.htm index.nginx-debian.html; 

    server_name _; 

    location /public/ { 
      alias /home/myapp/public/; 
    } 

    location/{ 
      proxy_pass http://IPADRESSOFNODEJSSERVER:8080; 
      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; 
      # First attempt to serve request as file, then 
      # as directory, then fall back to displaying a 404. 
      #try_files $uri $uri/ =404; 
    } 

Каждый запрос с/открытый/в первой части URL будет обрабатываться Nginx и любой другой запрос будет передан вам nodejs приложение на вашем IPADRESSOFNODEJSSERVER:NODEJSPORT, как правило, IPADRESSOFNODEJSSERVER это локальный

Второй вариант с использованием NGNIX относится к секции док

еще лучше вариант заключается в U se обратный прокси для обслуживания статических файлов ; см. Использование обратного прокси для получения дополнительной информации.

http://expressjs.com/en/advanced/best-practice-performance.html#proxy

+0

Я знаю о функции express.static, однако я не знаю, как заменить res.sendFile на соответствующую функцию в пакете static-serve. – raz3r

+0

Это правильный ответ, вы должны поместить свое угловое приложение в папку, а затем использовать эту папку статически с помощью выражения. Таким образом, угловой делает свою вещь впереди, и экспресс может обрабатывать вызовы api, постоянный логин и т. Д. Это способ создания моего приложения [MEANBoilerPlate] (http://github.com/joeLloyd/MEANBoilerPlate) –

Смежные вопросы