Как запустить сервер Node.JS для веб-приложения?
Информация: я очень новичок в node.JS!
Я написал пример сервера, который может прослушивать HTTP-запросы через порт XXXX. Когда я запускаю этот сервер из командной строки (Windows), он, кажется, работает хорошо. Он отвечает на запросы, сделанные localhost: XXXX при открытии в браузере.
Вопрос: это как это должно работать? Чтобы сервер узла работал, всегда ли должен быть открыт запрос CMD, чтобы сервер мог прослушивать запросы? Могу ли я не делать "что-то" с IISNode?
Я понимаю, что если я делаю запрос к файлам JS, который отмечен в IISNode как файл Node.JS и что NODE должен обрабатывать его; тогда у меня будет Node, обрабатывающий запрос для меня. Но тогда это предполагает, что IIS является веб-сервером для меня, и что конкретные запросы могут обрабатываться Node.
Я надеюсь, что здесь есть смысл!:)
4 ответа
Я решил это, используя правильный метод. Да, IISNode это так. Но ни один из комментариев, по-видимому, не отвечал на вопрос о том, как "запустить" app.js для разных приложений, размещенных на одном и том же IIS (который также обслуживает PHP, ASPX и т. Д.).
Шаг 1. Отредактируйте точку входа приложения вашего узла (обычно) app.js для новой структуры URL.
Экспресс-приложение предполагает, что оно владеет всем пространством URL-адресов и запускает URL-адреса из самого корня, как показано ниже:
Отредактируйте ваш app.js так, чтобы он выглядел следующим образом (но вместо имени "aaspass" укажите имя каталога ВАШЕГО приложения!!):
Теперь поместите файл web.config в корень вашего приложения, который выглядит следующим образом (Вы можете использовать этот шаблон: webconfig).
Снова отредактируйте файл и измените имя "aaspass" на имя каталога вашего приложения.
Это оно! Вы можете сделать это для любого количества приложений и разместить их на одном и том же сервере.
В Windows у вас есть два варианта размещения приложений node.js:
- Самостоятельно разместите процесс node.exe, как если бы вы *nix. Во время разработки вы, вероятно, просто запустите его из командной строки. В производственном процессе вы хотите создать механизм, который обеспечит управление временем жизни процесса для node.exe (например, запустить его при запуске ОС). Наиболее разумный способ сделать это в Windows - это использовать Windows Services (также известные как NT Services). Компонент, который может помочь вам сделать это, http://nssm.cc/.
- Разместите узел node.js в IIS с помощью iisnode ( http://github.com/tjanczuk/iisnode). По сравнению с самостоятельным размещением этот метод имеет ряд преимуществ, описанных в https://github.com/tjanczuk/iisnode/wiki. Но вы также хотите изучить последствия для производительности (на самом деле не все они плохие): http://tomasz.janczuk.org/2012/06/performance-of-hosting-nodejs.html.
Что сработало для меня:
- Установить IISNode
- Установить модуль перезаписи URL IIS
Добавьте файл web.config в ваше приложение / папку Node.js. Вот содержимое файла web.config:
В обработчике мне просто нужно указать на app.js (типичная точка входа вашего приложения). Я не внес изменения ни в один из моих маршрутов (нет необходимости добавлять текст).
..
<configuration>
<appSettings>
<add key="NODE_ENV" value="production" />
</appSettings>
<system.webServer>
<handlers>
<add name="iisnode" path="server/app.js" verb="*" modules="iisnode" />
</handlers>
<rewrite>
<rules>
<clear />
<rule name="cdw">
<match url="/*" />
<action type="Rewrite" url="server/app.js" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Если вы работаете в Windows, вы можете (и, вероятно, должны) запустить Node.js под IIS:
http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx